Skip to content

Commit a9ebe91

Browse files
Gergely Topolyaischfeca75
authored andcommitted
CLOUD-93453 Image catalog as managed resource in Mock integration tests
1 parent 1c2ddcb commit a9ebe91

12 files changed

+123
-0
lines changed

integration-test/it-application.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
mock:
22
server:
33
address: test.service.consul
4+
image:
5+
catalog:
6+
url: https://test.service.consul:9443/imagecatalog
47

58
integrationtest:
69
testsuite:
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package com.sequenceiq.it;
2+
3+
import java.util.List;
4+
5+
import javax.inject.Inject;
6+
import javax.ws.rs.ForbiddenException;
7+
8+
import org.springframework.beans.factory.annotation.Value;
9+
import org.springframework.boot.test.context.ConfigFileApplicationContextInitializer;
10+
import org.springframework.test.context.ContextConfiguration;
11+
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
12+
import org.springframework.util.CollectionUtils;
13+
import org.testng.ITestContext;
14+
import org.testng.annotations.AfterSuite;
15+
import org.testng.annotations.BeforeSuite;
16+
import org.testng.annotations.Optional;
17+
import org.testng.annotations.Parameters;
18+
19+
import com.sequenceiq.cloudbreak.api.endpoint.v1.ImageCatalogEndpoint;
20+
import com.sequenceiq.cloudbreak.api.model.imagecatalog.ImageCatalogRequest;
21+
import com.sequenceiq.cloudbreak.api.model.imagecatalog.ImageCatalogResponse;
22+
import com.sequenceiq.cloudbreak.client.CloudbreakClient;
23+
import com.sequenceiq.it.cloudbreak.CloudbreakITContextConstants;
24+
import com.sequenceiq.it.config.IntegrationTestConfiguration;
25+
import com.sequenceiq.it.util.CleanupService;
26+
27+
@ContextConfiguration(classes = IntegrationTestConfiguration.class, initializers = ConfigFileApplicationContextInitializer.class)
28+
public class MockSuiteInitializer extends AbstractTestNGSpringContextTests {
29+
30+
private static final String MOCK_IMAGE_CATALOG_NAME = "mock-image-catalog-name";
31+
32+
@Value("${mock.image.catalog.url:https://localhost:9443/imagecatalog}")
33+
private String imageCatalogUrl;
34+
35+
@Value("${integrationtest.testsuite.cleanUpOnFailure}")
36+
private boolean cleanUpOnFailure;
37+
38+
@Value("${integrationtest.cleanup.cleanupBeforeStart}")
39+
private boolean cleanUpBeforeStart;
40+
41+
@Inject
42+
private CleanupService cleanUpService;
43+
44+
@Inject
45+
private SuiteContext suiteContext;
46+
47+
private IntegrationTestContext itContext;
48+
49+
@BeforeSuite(dependsOnGroups = "suiteInit")
50+
public void initContext(ITestContext testContext) throws Exception {
51+
// Workaround of https://jira.spring.io/browse/SPR-4072
52+
springTestContextBeforeTestClass();
53+
springTestContextPrepareTestInstance();
54+
55+
itContext = suiteContext.getItContext(testContext.getSuite().getName());
56+
}
57+
58+
@BeforeSuite(dependsOnMethods = "initContext")
59+
public void initSuiteMap(ITestContext testContext) throws Exception {
60+
CloudbreakClient cloudbreakClient = itContext.getContextParam(CloudbreakITContextConstants.CLOUDBREAK_CLIENT, CloudbreakClient.class);
61+
62+
if (cleanUpBeforeStart && isImageCatalogExists(cloudbreakClient.imageCatalogEndpoint(), MOCK_IMAGE_CATALOG_NAME)) {
63+
cleanUpService.deleteImageCatalog(cloudbreakClient, MOCK_IMAGE_CATALOG_NAME);
64+
}
65+
66+
createMockImageCatalog(cloudbreakClient.imageCatalogEndpoint());
67+
}
68+
69+
private boolean isImageCatalogExists(ImageCatalogEndpoint endpoint, String mockImageCatalogName) throws Exception {
70+
try {
71+
return endpoint.getPublicByName(mockImageCatalogName) != null;
72+
} catch (ForbiddenException e) {
73+
return false;
74+
}
75+
}
76+
77+
private void createMockImageCatalog(ImageCatalogEndpoint endpoint) throws Exception {
78+
if (!isImageCatalogExists(endpoint, MOCK_IMAGE_CATALOG_NAME)) {
79+
ImageCatalogRequest imageCatalogRequest = new ImageCatalogRequest();
80+
imageCatalogRequest.setName(MOCK_IMAGE_CATALOG_NAME);
81+
imageCatalogRequest.setUrl(imageCatalogUrl);
82+
ImageCatalogResponse imageCatalogResponse = endpoint.postPublic(imageCatalogRequest);
83+
84+
if (imageCatalogResponse == null) {
85+
throw new IllegalArgumentException("ImageCatalog creation failed.");
86+
}
87+
88+
endpoint.putSetDefaultByName(MOCK_IMAGE_CATALOG_NAME);
89+
}
90+
}
91+
92+
@AfterSuite(alwaysRun = true)
93+
@Parameters("cleanUp")
94+
public void cleanUp(@Optional("true") boolean cleanUp) {
95+
if (isCleanUpNeeded(cleanUp)) {
96+
CloudbreakClient cloudbreakClient = itContext.getContextParam(CloudbreakITContextConstants.CLOUDBREAK_CLIENT, CloudbreakClient.class);
97+
cleanUpService.deleteImageCatalog(cloudbreakClient, MOCK_IMAGE_CATALOG_NAME);
98+
}
99+
}
100+
101+
private boolean isCleanUpNeeded(boolean cleanUp) {
102+
boolean noTestsFailed = CollectionUtils.isEmpty(itContext.getContextParam(CloudbreakITContextConstants.FAILED_TESTS, List.class));
103+
return cleanUp && (cleanUpOnFailure || noTestsFailed);
104+
}
105+
106+
}

integration-test/src/main/java/com/sequenceiq/it/util/CleanupService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,11 @@ public boolean deleteRecipe(CloudbreakClient cloudbreakClient, Long recipeId) {
176176
return true;
177177
}
178178

179+
public boolean deleteImageCatalog(CloudbreakClient cloudbreakClient, String name) {
180+
cloudbreakClient.imageCatalogEndpoint().deletePublic(name);
181+
return true;
182+
}
183+
179184
public boolean deleteRdsConfigs(CloudbreakClient cloudbreakClient, String rdsConfigId) {
180185
if (rdsConfigId != null) {
181186
cloudbreakClient.rdsConfigEndpoint().delete(Long.valueOf(rdsConfigId));

integration-test/src/main/resources/testsuites/mock/mock-clustercreate-salt-failed.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ tests:
99
classes:
1010
- com.sequenceiq.it.TestSuiteInitializer
1111
- com.sequenceiq.it.cloudbreak.CloudbreakTestSuiteInitializer
12+
- com.sequenceiq.it.MockSuiteInitializer
1213

1314
- name: start ssh server on port 2020
1415
parameters:

integration-test/src/main/resources/testsuites/mock/mock-clustercreate-salt.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ tests:
99
classes:
1010
- com.sequenceiq.it.TestSuiteInitializer
1111
- com.sequenceiq.it.cloudbreak.CloudbreakTestSuiteInitializer
12+
- com.sequenceiq.it.MockSuiteInitializer
1213

1314
- name: start ssh server on port 2020
1415
parameters:

integration-test/src/main/resources/testsuites/mock/mock-kerberized-clustercreate-salt.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ tests:
99
classes:
1010
- com.sequenceiq.it.TestSuiteInitializer
1111
- com.sequenceiq.it.cloudbreak.CloudbreakTestSuiteInitializer
12+
- com.sequenceiq.it.MockSuiteInitializer
1213

1314
- name: start ssh server on port 2020
1415
parameters:

integration-test/src/main/resources/testsuites/mock/mock-scaling-big-salt.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ tests:
99
classes:
1010
- com.sequenceiq.it.TestSuiteInitializer
1111
- com.sequenceiq.it.cloudbreak.CloudbreakTestSuiteInitializer
12+
- com.sequenceiq.it.MockSuiteInitializer
1213

1314
- name: start ssh server on port 2020
1415
parameters:

integration-test/src/main/resources/testsuites/mock/mock-scaling-salt.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ tests:
99
classes:
1010
- com.sequenceiq.it.TestSuiteInitializer
1111
- com.sequenceiq.it.cloudbreak.CloudbreakTestSuiteInitializer
12+
- com.sequenceiq.it.MockSuiteInitializer
1213

1314
- name: start ssh server on port 2020
1415
parameters:

integration-test/src/main/resources/testsuites/v2/mock/v2-mock-kerberized-stackcreate-scaling.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ tests:
1010
classes:
1111
- com.sequenceiq.it.TestSuiteInitializer
1212
- com.sequenceiq.it.cloudbreak.CloudbreakTestSuiteInitializer
13+
- com.sequenceiq.it.MockSuiteInitializer
1314

1415
- name: start ssh server on port 2020
1516
parameters:

integration-test/src/main/resources/testsuites/v2/mock/v2-mock-stackcreate-bigscaling.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ tests:
1010
classes:
1111
- com.sequenceiq.it.TestSuiteInitializer
1212
- com.sequenceiq.it.cloudbreak.CloudbreakTestSuiteInitializer
13+
- com.sequenceiq.it.MockSuiteInitializer
1314

1415
- name: start ssh server on port 2020
1516
parameters:

0 commit comments

Comments
 (0)