Skip to content

Commit 305407a

Browse files
committed
modifications and embedded driver
1 parent 6a70217 commit 305407a

File tree

8 files changed

+334
-2
lines changed

8 files changed

+334
-2
lines changed

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,4 +367,8 @@ jdk_8_maven/em/external/rest/spring-batch-rest/target
367367

368368
/jdk_11_maven/cs/rest/http-patch-spring/target
369369
/jdk_11_maven/em/embedded/rest/http-patch-spring/target
370-
/jdk_11_maven/em/external/rest/http-patch-spring/target
370+
/jdk_11_maven/em/external/rest/http-patch-spring/target
371+
372+
/jdk_8_maven/cs/rest/original/angular-ecommerce/target
373+
/jdk_8_maven/em/embedded/rest/angular-ecommerce/target
374+
/jdk_8_maven/em/external/rest/angular-ecommerce/target

jdk_8_maven/cs/rest/original/angular-ecommerce/pom.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,31 @@
112112
<artifactId>mapstruct</artifactId>
113113
<version>1.3.0.Final</version>
114114
</dependency>
115+
<!-- MODIFIED-->
116+
<dependency>
117+
<groupId>io.springfox</groupId>
118+
<artifactId>springfox-swagger2</artifactId>
119+
<version>2.9.2</version>
120+
</dependency>
121+
<dependency>
122+
<groupId>io.springfox</groupId>
123+
<artifactId>springfox-swagger-ui</artifactId>
124+
<version>2.9.2</version>
125+
</dependency>
126+
<!-- MODIFIED-->
115127
</dependencies>
116128

117129
<build>
118130
<plugins>
119131
<plugin>
120132
<groupId>org.springframework.boot</groupId>
121133
<artifactId>spring-boot-maven-plugin</artifactId>
134+
<!-- MODIFIED-->
135+
<configuration>
136+
<finalName>angular-ecommerce</finalName>
137+
<classifier>sut</classifier>
138+
</configuration>
139+
<!-- MODIFIED-->
122140
</plugin>
123141
<plugin>
124142
<groupId>org.apache.maven.plugins</groupId>

jdk_8_maven/cs/rest/original/angular-ecommerce/src/main/java/com/techie/shoppingstore/config/AppSecurityConfig.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ public void configure(HttpSecurity httpSecurity) throws Exception {
6363
.authorizeRequests()
6464
.antMatchers("/api/auth/**")
6565
.permitAll()
66-
.antMatchers("/api/store/catalog/**")
66+
.antMatchers("/api/store/catalog/**",
67+
// MODIFIED
68+
"/v2/api-docs/**")
6769
.permitAll()
6870
.anyRequest().authenticated();
6971

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.techie.shoppingstore.config;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import springfox.documentation.spi.DocumentationType;
6+
import springfox.documentation.spring.web.plugins.Docket;
7+
import springfox.documentation.swagger2.annotations.EnableSwagger2;
8+
9+
@Configuration
10+
@EnableSwagger2
11+
public class SwaggerConfig {
12+
13+
@Bean
14+
public Docket api() {
15+
return new Docket(DocumentationType.SWAGGER_2);
16+
}
17+
}

jdk_8_maven/cs/rest/original/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<module>spring-batch-rest</module>
2727
<module>spring-actuator-demo</module>
2828
<module>swagger-petstore</module>
29+
<module>angular-ecommerce</module>
2930
</modules>
3031

3132

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
8+
<artifactId>evomaster-benchmark-em-embedded-rest-angular-ecommerce</artifactId>
9+
<packaging>jar</packaging>
10+
11+
<parent>
12+
<groupId>org.evomaster</groupId>
13+
<artifactId>evomaster-benchmark-em-embedded-rest</artifactId>
14+
<version>3.4.1-SNAPSHOT</version>
15+
</parent>
16+
17+
<dependencyManagement>
18+
<dependencies>
19+
<dependency>
20+
<groupId>org.springframework.boot</groupId>
21+
<artifactId>spring-boot-starter-parent</artifactId>
22+
<version>2.1.1.RELEASE</version>
23+
<type>pom</type>
24+
<scope>import</scope>
25+
</dependency>
26+
</dependencies>
27+
</dependencyManagement>
28+
29+
<dependencies>
30+
<dependency>
31+
<groupId>org.mongodb</groupId>
32+
<artifactId>mongodb-driver-sync</artifactId>
33+
<version>3.8.2</version>
34+
</dependency>
35+
<dependency>
36+
<groupId>org.mongodb</groupId>
37+
<artifactId>mongodb-driver-core</artifactId>
38+
<version>3.8.2</version>
39+
</dependency>
40+
<dependency>
41+
<groupId>com.techie.shoppingstore</groupId>
42+
<artifactId>NGSpringShoppingStore</artifactId>
43+
<version>0.0.1-SNAPSHOT</version>
44+
</dependency>
45+
46+
<dependency>
47+
<groupId>org.testcontainers</groupId>
48+
<artifactId>testcontainers</artifactId>
49+
<scope>compile</scope>
50+
</dependency>
51+
<dependency>
52+
<groupId>junit</groupId>
53+
<artifactId>junit</artifactId>
54+
<scope>compile</scope>
55+
<version>4.11</version>
56+
</dependency>
57+
58+
</dependencies>
59+
60+
61+
</project>
Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
package em.embedded.angular.ecommerce;
2+
3+
import com.mongodb.BasicDBObject;
4+
import com.mongodb.client.MongoClient;
5+
import com.mongodb.client.MongoClients;
6+
import com.mongodb.client.MongoCollection;
7+
import com.mongodb.client.MongoDatabase;
8+
import org.evomaster.client.java.controller.AuthUtils;
9+
import org.evomaster.client.java.controller.EmbeddedSutController;
10+
import org.evomaster.client.java.controller.InstrumentedSutStarter;
11+
import org.evomaster.client.java.controller.api.dto.auth.AuthenticationDto;
12+
import org.evomaster.client.java.controller.api.dto.SutInfoDto;
13+
import org.evomaster.client.java.sql.DbSpecification;
14+
import org.evomaster.client.java.controller.problem.ProblemInfo;
15+
import org.evomaster.client.java.controller.problem.RestProblem;
16+
import org.springframework.boot.SpringApplication;
17+
import org.springframework.context.ConfigurableApplicationContext;
18+
import org.testcontainers.containers.GenericContainer;
19+
import org.testcontainers.utility.DockerImageName;
20+
import com.techie.shoppingstore.NgSpringShoppingStoreApplication;
21+
22+
import java.util.Arrays;
23+
import java.util.Collections;
24+
import java.util.List;
25+
import java.util.Map;
26+
import org.bson.Document;
27+
import org.bson.types.ObjectId;
28+
29+
/**
30+
* Class used to start/stop the SUT. This will be controller by the EvoMaster process
31+
*/
32+
public class EmbeddedEvoMasterController extends EmbeddedSutController {
33+
34+
public static void main(String[] args) {
35+
36+
int port = 40100;
37+
if (args.length > 0) {
38+
port = Integer.parseInt(args[0]);
39+
}
40+
41+
EmbeddedEvoMasterController controller = new EmbeddedEvoMasterController(port);
42+
InstrumentedSutStarter starter = new InstrumentedSutStarter(controller);
43+
44+
starter.start();
45+
}
46+
47+
48+
private ConfigurableApplicationContext ctx;
49+
50+
private static final int MONGODB_PORT = 27017;
51+
52+
private static final String MONGODB_VERSION = "7.0";
53+
54+
private static final String MONGODB_DATABASE_NAME = "test";
55+
56+
private static final GenericContainer mongodbContainer = new GenericContainer("mongo:" + MONGODB_VERSION)
57+
.withTmpFs(Collections.singletonMap("/data/db", "rw"))
58+
.withExposedPorts(MONGODB_PORT);
59+
60+
private static final String REDIS_VERSION = "7.0.11";
61+
private static final int REDIS_PORT = 6379;
62+
63+
private static final GenericContainer<?> redisContainer = new GenericContainer("redis:" + REDIS_VERSION)
64+
.withExposedPorts(REDIS_PORT)
65+
.withCommand("redis-server", "--appendonly", "yes");
66+
67+
private static final String ELASTICSEARCH_VERSION = "6.8.23";
68+
private static final int HTTP_PORT = 9200;
69+
private static final int TRANSPORT_PORT = 9300;
70+
71+
private static final GenericContainer<?> elasticsearchContainer =
72+
new GenericContainer<>(DockerImageName.parse(
73+
"docker.elastic.co/elasticsearch/elasticsearch:" + ELASTICSEARCH_VERSION))
74+
.withEnv("discovery.type", "single-node")
75+
.withEnv("cluster.name", "elasticsearch")
76+
.withEnv("ES_JAVA_OPTS", "-Xms512m -Xmx512m")
77+
.withEnv("xpack.security.enabled", "false")
78+
.withTmpFs(Collections.singletonMap("/usr/share/elasticsearch/data", "rw"))
79+
.withExposedPorts(HTTP_PORT, TRANSPORT_PORT);
80+
81+
82+
private MongoClient mongoClient;
83+
84+
public EmbeddedEvoMasterController() {
85+
this(0);
86+
}
87+
88+
public EmbeddedEvoMasterController(int port) {
89+
setControllerPort(port);
90+
}
91+
92+
93+
@Override
94+
public String startSut() {
95+
96+
mongodbContainer.start();
97+
redisContainer.start();
98+
elasticsearchContainer.start();
99+
100+
mongoClient = MongoClients.create("mongodb://" + mongodbContainer.getContainerIpAddress() + ":" + mongodbContainer.getMappedPort(MONGODB_PORT));
101+
102+
try {
103+
Thread.sleep(3_000);
104+
} catch (InterruptedException e) {
105+
throw new RuntimeException(e);
106+
}
107+
108+
ctx = SpringApplication.run(NgSpringShoppingStoreApplication.class,
109+
new String[]{"--server.port=0",
110+
"--spring.datasource.host=" + mongodbContainer.getContainerIpAddress(),
111+
"--spring.datasource.port=" + mongodbContainer.getMappedPort(MONGODB_PORT),
112+
"--spring.datasource.database=" + MONGODB_DATABASE_NAME,
113+
"--spring.data.mongodb.uri=mongodb://" + mongodbContainer.getContainerIpAddress() + ":" + mongodbContainer.getMappedPort(MONGODB_PORT) + "/" + MONGODB_DATABASE_NAME,
114+
"--spring.redis.host=" + redisContainer.getContainerIpAddress(),
115+
"--spring.redis.port=" + redisContainer.getMappedPort(REDIS_PORT),
116+
"--spring.data.elasticsearch.cluster-name=elasticsearch",
117+
"--spring.data.elsticsearch.cluster-nodes=" + elasticsearchContainer.getContainerIpAddress() + ":" + elasticsearchContainer.getMappedPort(TRANSPORT_PORT),
118+
"--spring.cache.type=NONE"
119+
});
120+
121+
return "http://localhost:" + getSutPort();
122+
}
123+
124+
protected int getSutPort() {
125+
return (Integer) ((Map) ctx.getEnvironment()
126+
.getPropertySources().get("server.ports").getSource())
127+
.get("local.server.port");
128+
}
129+
130+
131+
@Override
132+
public boolean isSutRunning() {
133+
return ctx != null && ctx.isRunning();
134+
}
135+
136+
@Override
137+
public void stopSut() {
138+
ctx.stop();
139+
ctx.close();
140+
141+
mongodbContainer.stop();
142+
mongoClient.close();
143+
redisContainer.stop();
144+
elasticsearchContainer.stop();
145+
}
146+
147+
@Override
148+
public String getPackagePrefixesToCover() {
149+
return "com.techie.shoppingstore.";
150+
}
151+
152+
@Override
153+
public void resetStateOfSUT() {
154+
MongoDatabase db = mongoClient.getDatabase(MONGODB_DATABASE_NAME);
155+
156+
157+
for(String name: db.listCollectionNames()){
158+
db.getCollection(name).deleteMany(new BasicDBObject());
159+
}
160+
161+
MongoCollection<Document> users = db.getCollection("User");
162+
users.insertMany(Arrays.asList(
163+
new Document()
164+
.append("_id", new ObjectId())
165+
.append("_class", "com.techie.shoppingstore.model.User")
166+
.append("username", "user1")
167+
.append("email", "user1@email.com")
168+
.append("enabled", true)
169+
//12345678
170+
.append("password", "$2a$12$p9eP3beaPuSMbS1enDn1Z.zFuv6npjm6xjyQnnEqvVG.CD03d1aoi"),
171+
new Document()
172+
.append("_id", new ObjectId())
173+
.append("_class", "com.techie.shoppingstore.model.User")
174+
.append("username", "user2")
175+
.append("email", "user2@email.com")
176+
.append("enabled", true)
177+
//12345678
178+
.append("password", "$2a$12$p9eP3beaPuSMbS1enDn1Z.zFuv6npjm6xjyQnnEqvVG.CD03d1aoi")
179+
));
180+
}
181+
182+
183+
@Override
184+
public List<DbSpecification> getDbSpecifications() {
185+
return null;
186+
}
187+
188+
String rawPassword = "12345678";
189+
190+
@Override
191+
public List<AuthenticationDto> getInfoForAuthentication() {
192+
return Arrays.asList(
193+
AuthUtils.getForJsonTokenBearer(
194+
"user1",
195+
"/api/auth/login",
196+
"{\"username\":\"user1\", \"password\":\""+rawPassword+"\"}",
197+
"/accessToken"
198+
),
199+
AuthUtils.getForJsonTokenBearer(
200+
"user2",
201+
"/api/auth/login",
202+
"{\"username\":\"user2\", \"password\":\""+rawPassword+"\"}",
203+
"/accessToken"
204+
)
205+
);
206+
}
207+
208+
209+
210+
211+
@Override
212+
public ProblemInfo getProblemInfo() {
213+
return new RestProblem(
214+
"http://localhost:" + getSutPort() + "/v2/api-docs",
215+
null
216+
);
217+
}
218+
219+
@Override
220+
public SutInfoDto.OutputFormat getPreferredOutputFormat() {
221+
return SutInfoDto.OutputFormat.JAVA_JUNIT_5;
222+
}
223+
224+
@Override
225+
public Object getMongoConnection() {
226+
return mongoClient;
227+
}
228+
}

jdk_8_maven/em/embedded/rest/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
<module>spring-batch-rest</module>
3333
<module>spring-actuator-demo</module>
3434
<module>swagger-petstore</module>
35+
<module>angular-ecommerce</module>
3536
</modules>
3637

3738
</project>

0 commit comments

Comments
 (0)