Skip to content

Commit a45e637

Browse files
committed
introduced moco junit 5 module
1 parent 1d4db05 commit a45e637

15 files changed

Lines changed: 454 additions & 8 deletions

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ subprojects {
145145
}
146146
}
147147

148-
configure(subprojects.findAll {it.name != "moco-junit"}) {
148+
configure(subprojects.findAll {!it.name.startsWith("moco-junit")}) {
149149
dependencies {
150150
testImplementation(
151151
"org.junit.jupiter:junit-jupiter-api:$junitVersion",

moco-junit/build.gradle

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,5 @@ project.dependencies {
66
testImplementation(
77
project(':moco-core').sourceSets.test.output,
88
project(':moco-runner').sourceSets.test.output
9-
// {
10-
// exclude group: 'org.junit.jupiter', module: 'junit-jupiter-api'
11-
// exclude group: 'org.junit.jupiter', module: 'junit-jupiter-engine'
12-
// exclude group: 'org.junit.jupiter', module: 'junit-jupiter-params'
13-
// exclude group: 'org.junit.platform', module: 'junit-platform-launcher'
14-
// }
159
)
1610
}

moco-junit5/build.gradle

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
project.dependencies {
2+
api(project(':moco-core'))
3+
api(project(':moco-runner'))
4+
api("org.junit.jupiter:junit-jupiter-api:5.0.0")
5+
6+
testImplementation(
7+
project(':moco-core').sourceSets.test.output,
8+
project(':moco-runner').sourceSets.test.output,
9+
"org.junit.jupiter:junit-jupiter-api:5.0.0",
10+
"org.junit.jupiter:junit-jupiter-engine:5.0.0",
11+
"org.junit.jupiter:junit-jupiter-params:5.0.0"
12+
)
13+
14+
15+
testRuntimeOnly(
16+
"org.junit.platform:junit-platform-launcher:$junitPlatformVersion"
17+
)
18+
}
19+
20+
test {
21+
useJUnitPlatform()
22+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.github.dreamhead.moco.junit5;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Inherited;
5+
import java.lang.annotation.Retention;
6+
import java.lang.annotation.RetentionPolicy;
7+
import java.lang.annotation.Target;
8+
9+
@Target({ElementType.TYPE})
10+
@Retention(RetentionPolicy.RUNTIME)
11+
@Inherited
12+
public @interface MocoCertificate {
13+
String filepath() default "";
14+
15+
String classpath() default "";
16+
17+
String keyStorePassword();
18+
19+
String certPassword();
20+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.github.dreamhead.moco.junit5;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Inherited;
5+
import java.lang.annotation.Retention;
6+
import java.lang.annotation.RetentionPolicy;
7+
import java.lang.annotation.Target;
8+
9+
@Target({ElementType.TYPE})
10+
@Retention(RetentionPolicy.RUNTIME)
11+
@Inherited
12+
public @interface MocoConfiguration {
13+
int port();
14+
15+
String classpath() default "";
16+
17+
String filepath() default "";
18+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package com.github.dreamhead.moco.junit5;
2+
3+
import com.github.dreamhead.moco.HttpServer;
4+
import com.github.dreamhead.moco.HttpsCertificate;
5+
import com.github.dreamhead.moco.Runner;
6+
import com.github.dreamhead.moco.resource.ContentResource;
7+
import com.github.dreamhead.moco.resource.Resource;
8+
import com.google.common.base.Strings;
9+
import org.junit.jupiter.api.extension.AfterEachCallback;
10+
import org.junit.jupiter.api.extension.BeforeEachCallback;
11+
import org.junit.jupiter.api.extension.Extension;
12+
import org.junit.jupiter.api.extension.ExtensionContext;
13+
import org.junit.jupiter.api.extension.TestInstancePostProcessor;
14+
15+
import static com.github.dreamhead.moco.Moco.file;
16+
import static com.github.dreamhead.moco.Moco.pathResource;
17+
import static com.github.dreamhead.moco.MocoJsonRunner.jsonHttpServer;
18+
import static com.github.dreamhead.moco.MocoJsonRunner.jsonHttpsServer;
19+
import static com.github.dreamhead.moco.Runner.runner;
20+
import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.create;
21+
22+
public class MocoJunit5Extension implements TestInstancePostProcessor, BeforeEachCallback, AfterEachCallback, Extension {
23+
private static final ExtensionContext.Namespace MOCO = create("com.github.dreamhead.moco.junit5");
24+
private static final String SERVER = "server";
25+
26+
@Override
27+
public void afterEach(final ExtensionContext context) throws Exception {
28+
Runner runner = context.getStore(MOCO).get(SERVER, Runner.class);
29+
runner.stop();
30+
31+
}
32+
33+
@Override
34+
public void beforeEach(final ExtensionContext context) throws Exception {
35+
Runner runner = context.getStore(MOCO).get(SERVER, Runner.class);
36+
if (runner == null) {
37+
throw new IllegalStateException("No Moco server found. Please check if @MocoConfiguration is added.");
38+
}
39+
40+
runner.start();
41+
}
42+
43+
@Override
44+
public void postProcessTestInstance(final Object testInstance, final ExtensionContext context) throws Exception {
45+
Class<?> testInstanceClass = testInstance.getClass();
46+
MocoConfiguration configuration = testInstanceClass.getAnnotation(MocoConfiguration.class);
47+
MocoCertificate certificate = testInstanceClass.getAnnotation(MocoCertificate.class);
48+
49+
if (configuration == null) {
50+
throw new IllegalStateException("No Moco server found. Please check if @MocoConfiguration is added.");
51+
}
52+
53+
context.getStore(MOCO).put(SERVER, runner(newServer(configuration, certificate)));
54+
}
55+
56+
private HttpServer newServer(final MocoConfiguration configuration, final MocoCertificate certificate) {
57+
Resource resource = getResource(configuration);
58+
int port = configuration.port();
59+
60+
if (certificate != null) {
61+
return jsonHttpsServer(port, resource, newCertificate(certificate));
62+
}
63+
64+
return jsonHttpServer(port, resource);
65+
}
66+
67+
private HttpsCertificate newCertificate(final MocoCertificate certificate) {
68+
return HttpsCertificate.certificate(getResource(certificate), certificate.keyStorePassword(), certificate.certPassword());
69+
}
70+
71+
private ContentResource getResource(final MocoConfiguration configuration) {
72+
return getResource(configuration.filepath(), configuration.classpath());
73+
}
74+
75+
private ContentResource getResource(final MocoCertificate certificate) {
76+
return getResource(certificate.filepath(), certificate.classpath());
77+
}
78+
79+
private static ContentResource getResource(final String filepath, final String classpath) {
80+
if (!Strings.isNullOrEmpty(filepath)) {
81+
return file(filepath);
82+
}
83+
84+
if (!Strings.isNullOrEmpty(classpath)) {
85+
return pathResource(classpath);
86+
}
87+
88+
throw new IllegalArgumentException("No configuration found");
89+
}
90+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.github.dreamhead.moco.junit5;
2+
3+
import com.github.dreamhead.moco.AbstractMocoStandaloneTest;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
7+
import java.io.IOException;
8+
9+
import static com.github.dreamhead.moco.helper.RemoteTestUtils.root;
10+
import static org.hamcrest.CoreMatchers.is;
11+
import static org.hamcrest.MatcherAssert.assertThat;
12+
13+
@ExtendWith(MocoJunit5Extension.class)
14+
@MocoConfiguration(classpath = "foo.json", port=12306)
15+
public class MocoJunitClasspathJsonHttpRunnerTest extends AbstractMocoStandaloneTest {
16+
@Test
17+
public void should_return_expected_message() throws IOException {
18+
assertThat(helper.get(root()), is("foo"));
19+
}
20+
21+
@Test
22+
public void should_return_expected_message_2() throws IOException {
23+
assertThat(helper.get(root()), is("foo"));
24+
}
25+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.github.dreamhead.moco.junit5;
2+
3+
import com.github.dreamhead.moco.AbstractMocoStandaloneTest;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
7+
import java.io.IOException;
8+
9+
import static com.github.dreamhead.moco.helper.RemoteTestUtils.httpsRoot;
10+
import static org.hamcrest.CoreMatchers.is;
11+
import static org.hamcrest.MatcherAssert.assertThat;
12+
13+
@ExtendWith(MocoJunit5Extension.class)
14+
@MocoConfiguration(filepath = "src/test/resources/foo.json", port=12306)
15+
@MocoCertificate(classpath = "certificate/cert.jks", keyStorePassword = "mocohttps", certPassword = "mocohttps")
16+
public class MocoJunitClasspathJsonHttpsRunnerTest extends AbstractMocoStandaloneTest {
17+
@Test
18+
public void should_return_expected_message() throws IOException {
19+
assertThat(helper.get(httpsRoot()), is("foo"));
20+
}
21+
22+
@Test
23+
public void should_return_expected_message_2() throws IOException {
24+
assertThat(helper.get(httpsRoot()), is("foo"));
25+
}
26+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.github.dreamhead.moco.junit5;
2+
3+
import com.github.dreamhead.moco.AbstractMocoStandaloneTest;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
7+
import java.io.IOException;
8+
9+
import static com.github.dreamhead.moco.helper.RemoteTestUtils.root;
10+
import static org.hamcrest.CoreMatchers.is;
11+
import static org.hamcrest.MatcherAssert.assertThat;
12+
13+
@ExtendWith(MocoJunit5Extension.class)
14+
@MocoConfiguration(filepath = "src/test/resources/foo.json", port=12306)
15+
public class MocoJunitFilepathJsonHttpRunnerTest extends AbstractMocoStandaloneTest {
16+
@Test
17+
public void should_return_expected_message() throws IOException {
18+
assertThat(helper.get(root()), is("foo"));
19+
}
20+
21+
@Test
22+
public void should_return_expected_message_2() throws IOException {
23+
assertThat(helper.get(root()), is("foo"));
24+
}
25+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.github.dreamhead.moco.junit5;
2+
3+
import com.github.dreamhead.moco.AbstractMocoStandaloneTest;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
7+
import java.io.IOException;
8+
9+
import static com.github.dreamhead.moco.helper.RemoteTestUtils.httpsRoot;
10+
import static com.github.dreamhead.moco.helper.RemoteTestUtils.root;
11+
import static org.hamcrest.CoreMatchers.is;
12+
import static org.hamcrest.MatcherAssert.assertThat;
13+
14+
@ExtendWith(MocoJunit5Extension.class)
15+
@MocoConfiguration(filepath = "src/test/resources/foo.json", port=12306)
16+
@MocoCertificate(filepath = "src/test/resources/certificate/cert.jks", keyStorePassword = "mocohttps", certPassword = "mocohttps")
17+
public class MocoJunitFilepathJsonHttpsRunnerTest extends AbstractMocoStandaloneTest {
18+
@Test
19+
public void should_return_expected_message() throws IOException {
20+
assertThat(helper.get(httpsRoot()), is("foo"));
21+
}
22+
23+
@Test
24+
public void should_return_expected_message_2() throws IOException {
25+
assertThat(helper.get(httpsRoot()), is("foo"));
26+
}
27+
}

0 commit comments

Comments
 (0)