use of org.finos.legend.engine.protocol.pure.v1.model.context.SDLC in project legend-sdlc by finos.
the class PureModelContextDataResource method getPureModelContextData.
protected PureModelContextData getPureModelContextData(String projectId, String revisionOrVersionId, Iterable<? extends Entity> entities) {
AlloySDLC sdlc = new AlloySDLC();
sdlc.project = projectId;
sdlc.baseVersion = revisionOrVersionId;
return PureModelContextDataBuilder.newBuilder().withProtocol("pure", PureClientVersions.production).withSDLC(sdlc).withEntitiesIfPossible(entities).build();
}
use of org.finos.legend.engine.protocol.pure.v1.model.context.SDLC in project legend-engine by finos.
the class TestServiceTestRunner method testMultiExecutionNoTestServiceFlow.
@Test
public void testMultiExecutionNoTestServiceFlow() throws Exception {
URL url = Objects.requireNonNull(getClass().getClassLoader().getResource("legend-sdlc-test-services-multi-execution-without-tests.json"));
PureModelContextData pureModelContextData = ObjectMapperFactory.getNewStandardObjectMapperWithPureProtocolExtensionSupports().readValue(url, PureModelContextData.class);
PureModel pureModel = new PureModel(pureModelContextData, null, Thread.currentThread().getContextClassLoader(), DeploymentMode.PROD);
Service service = pureModelContextData.getElementsOfType(Service.class).get(0);
List<RichServiceTestResult> testResults = this.runTest(service, pureModel, pureModelContextData);
Assert.assertNotNull(testResults);
Assert.assertEquals(1, testResults.size());
RichServiceTestResult testResult = testResults.get(0);
Assert.assertEquals("my::Service", testResult.getServicePath());
Assert.assertEquals("Env1", testResult.getOptionalMultiExecutionKey());
Assert.assertNull(testResult.getExecutionPlan());
Assert.assertNull(testResult.getJavaCodeString());
Assert.assertEquals(Collections.emptyMap(), testResult.getAssertExceptions());
Assert.assertEquals(Collections.emptyMap(), testResult.getResults());
}
use of org.finos.legend.engine.protocol.pure.v1.model.context.SDLC in project legend-sdlc by finos.
the class TestServiceExecutionClassGenerator method loadAndCompileService.
private Class<?> loadAndCompileService(String packagePrefix, String servicePath) throws Exception {
Service service = SERVICES.get(servicePath);
if (service == null) {
throw new RuntimeException("Could not find service: " + servicePath);
}
ServiceExecutionClassGenerator generator = ServiceExecutionClassGenerator.newGenerator(service, packagePrefix, "org/finos/legend/sdlc/generation/service/entities/" + servicePath.replace("::", "/").concat(".json"));
ServiceExecutionClassGenerator.GeneratedJavaClass generatedJavaClass = generator.generate();
String expectedClassName = ((packagePrefix == null) ? "" : (packagePrefix + ".")) + servicePath.replace("::", ".");
Assert.assertEquals(expectedClassName, generatedJavaClass.getName());
// Uncomment to update generated code
// org.apache.commons.io.FileUtils.writeStringToFile(new java.io.File("src/test/resources/generation/service/" + service.name + ".generated.java"), generatedJavaClass.getCode(), StandardCharsets.UTF_8);
Assert.assertEquals("Generated code matches expected formatting?", loadExpectedGeneratedServiceJavaFile(service.name), generatedJavaClass.getCode());
Class<?> cls = compileGeneratedJavaClass(generatedJavaClass);
Assert.assertTrue(AbstractServicePlanExecutor.class.isAssignableFrom(cls));
Assert.assertTrue(ServiceRunner.class.isAssignableFrom(cls));
assertRunMethodsExist(cls);
return cls;
}
use of org.finos.legend.engine.protocol.pure.v1.model.context.SDLC in project legend-engine by finos.
the class TestServiceTestRunner method testNoTestServiceFlow.
@Test
public void testNoTestServiceFlow() throws Exception {
URL url = Objects.requireNonNull(getClass().getClassLoader().getResource("legend-sdlc-test-services-without-tests.json"));
PureModelContextData pureModelContextData = ObjectMapperFactory.getNewStandardObjectMapperWithPureProtocolExtensionSupports().readValue(url, PureModelContextData.class);
PureModel pureModel = new PureModel(pureModelContextData, null, Thread.currentThread().getContextClassLoader(), DeploymentMode.PROD);
Service service = pureModelContextData.getElementsOfType(Service.class).get(0);
List<RichServiceTestResult> testResults = this.runTest(service, pureModel, pureModelContextData);
Assert.assertNotNull(testResults);
Assert.assertEquals(1, testResults.size());
RichServiceTestResult testResult = testResults.get(0);
Assert.assertEquals("test::legend::service::execution::test::m2m::simpleServiceNoTest", testResult.getServicePath());
Assert.assertNull(testResult.getOptionalMultiExecutionKey());
Assert.assertNull(testResult.getExecutionPlan());
Assert.assertNull(testResult.getJavaCodeString());
Assert.assertEquals(Collections.emptyMap(), testResult.getAssertExceptions());
Assert.assertEquals(Collections.emptyMap(), testResult.getResults());
}
use of org.finos.legend.engine.protocol.pure.v1.model.context.SDLC in project legend-engine by finos.
the class SDLCLoader method loadMetadataFromHTTPURL.
public static PureModelContextData loadMetadataFromHTTPURL(MutableList<CommonProfile> pm, LoggingEventType startEvent, LoggingEventType stopEvent, String url) {
Scope scope = GlobalTracer.get().scopeManager().active();
CloseableHttpClient httpclient = (CloseableHttpClient) HttpClientBuilder.getHttpClient(new BasicCookieStore());
long start = System.currentTimeMillis();
LogInfo info = new LogInfo(pm, startEvent, "Requesting metadata");
LOGGER.info(info.toString());
Span span = GlobalTracer.get().activeSpan();
if (span != null) {
span.log(info.eventType + ": " + info.message);
scope.span().setOperationName(startEvent.toString());
span.log(url);
}
LOGGER.info(new LogInfo(pm, LoggingEventType.METADATA_LOAD_FROM_URL, "Loading from URL " + url).toString());
HttpGet httpGet = new HttpGet(url);
if (span != null) {
GlobalTracer.get().inject(scope.span().context(), HTTP_HEADERS, new HttpRequestHeaderMap(httpGet));
}
try (CloseableHttpResponse response = httpclient.execute(httpGet)) {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode < 200 || statusCode >= 300) {
throw new EngineException("Error response from " + url + ", HTTP" + statusCode + "\n" + EntityUtils.toString(response.getEntity()));
}
HttpEntity entity1 = response.getEntity();
PureModelContextData modelContextData = objectMapper.readValue(entity1.getContent(), PureModelContextData.class);
Assert.assertTrue(modelContextData.getSerializer() != null, () -> "Engine was unable to load information from the Pure SDLC <a href='" + url + "'>link</a>");
LOGGER.info(new LogInfo(pm, stopEvent, (double) System.currentTimeMillis() - start).toString());
if (span != null) {
scope.span().log(String.valueOf(stopEvent));
}
return modelContextData;
} catch (Exception e) {
throw new EngineException("Engine was unable to load information from the Pure SDLC using: <a href='" + url + "' target='_blank'>link</a>", e);
}
}
Aggregations