use of co.cask.cdap.api.artifact.ArtifactSummary in project cdap by caskdata.
the class RouteConfigHttpHandlerTest method testRouteStore.
@Test
public void testRouteStore() throws Exception {
// deploy, check the status
Id.Artifact artifactId = Id.Artifact.from(new Id.Namespace(TEST_NAMESPACE1), "wordcountapp", VERSION1);
addAppArtifact(artifactId, WordCountApp.class).getStatusLine().getStatusCode();
ApplicationId appIdV1 = new ApplicationId(TEST_NAMESPACE1, WORDCOUNT_APP_NAME, "v1");
ApplicationId appIdV2 = new ApplicationId(TEST_NAMESPACE1, WORDCOUNT_APP_NAME, "v2");
AppRequest<ConfigTestApp.ConfigClass> request = new AppRequest<>(new ArtifactSummary(artifactId.getName(), artifactId.getVersion().getVersion()), null);
Assert.assertEquals(200, deploy(appIdV1, request).getStatusLine().getStatusCode());
Assert.assertEquals(200, deploy(appIdV2, request).getStatusLine().getStatusCode());
HttpResponse response = deploy(WordCountApp.class, Constants.Gateway.API_VERSION_3_TOKEN, TEST_NAMESPACE1);
Assert.assertEquals(200, response.getStatusLine().getStatusCode());
Map<String, Integer> routes = ImmutableMap.<String, Integer>builder().put("v1", 30).put("v2", 70).build();
String routeAPI = getVersionedAPIPath(String.format("apps/%s/services/%s/routeconfig", WORDCOUNT_APP_NAME, WORDCOUNT_SERVICE_NAME), Constants.Gateway.API_VERSION_3_TOKEN, TEST_NAMESPACE1);
doPut(routeAPI, GSON.toJson(routes));
String getResult = EntityUtils.toString(doGet(routeAPI).getEntity());
JsonObject jsonObject = GSON.fromJson(getResult, JsonObject.class);
Assert.assertNotNull(jsonObject);
Assert.assertEquals(30, jsonObject.get("v1").getAsInt());
Assert.assertEquals(70, jsonObject.get("v2").getAsInt());
doDelete(routeAPI);
HttpResponse getResponse = doGet(routeAPI);
getResult = EntityUtils.toString(getResponse.getEntity());
Assert.assertEquals(200, getResponse.getStatusLine().getStatusCode());
Assert.assertEquals("{}", getResult);
Assert.assertEquals(404, doDelete(routeAPI).getStatusLine().getStatusCode());
// Invalid Routes should return 400
routes = ImmutableMap.<String, Integer>builder().put("v1", 50).build();
response = doPut(routeAPI, GSON.toJson(routes));
Assert.assertEquals(400, response.getStatusLine().getStatusCode());
// Valid Routes but non-existing services should return 400
routes = ImmutableMap.<String, Integer>builder().put("v1", 30).put("v2", 70).build();
String nonexistNamespaceRouteAPI = getVersionedAPIPath(String.format("apps/%s/services/%s/routeconfig", WORDCOUNT_APP_NAME, WORDCOUNT_SERVICE_NAME), Constants.Gateway.API_VERSION_3_TOKEN, "_NONEXIST_NAMESPACE_");
response = doPut(nonexistNamespaceRouteAPI, GSON.toJson(routes));
Assert.assertEquals(400, response.getStatusLine().getStatusCode());
String nonexistAppRouteAPI = getVersionedAPIPath(String.format("apps/%s/services/%s/routeconfig", "_NONEXIST_APP", WORDCOUNT_SERVICE_NAME), Constants.Gateway.API_VERSION_3_TOKEN, TEST_NAMESPACE1);
response = doPut(nonexistAppRouteAPI, GSON.toJson(routes));
Assert.assertEquals(400, response.getStatusLine().getStatusCode());
routes = ImmutableMap.<String, Integer>builder().put("_NONEXIST_v1", 30).put("_NONEXIST_v2", 70).build();
response = doPut(routeAPI, GSON.toJson(routes));
Assert.assertEquals(400, response.getStatusLine().getStatusCode());
// Delete apps
deleteApp(appIdV1, 200);
deleteApp(appIdV2, 200);
}
use of co.cask.cdap.api.artifact.ArtifactSummary in project cdap by caskdata.
the class ProgramLifecycleHttpHandlerTest method testMultipleWorkflowSchedules.
@Test
public void testMultipleWorkflowSchedules() throws Exception {
// Deploy the app
NamespaceId testNamespace2 = new NamespaceId(TEST_NAMESPACE2);
Id.Namespace idTestNamespace2 = Id.Namespace.fromEntityId(testNamespace2);
Id.Artifact artifactId = Id.Artifact.from(idTestNamespace2, "appwithmultiplescheduledworkflows", VERSION1);
addAppArtifact(artifactId, AppWithMultipleSchedules.class);
AppRequest<? extends Config> appRequest = new AppRequest<>(new ArtifactSummary(artifactId.getName(), artifactId.getVersion().getVersion()));
Id.Application appDefault = new Id.Application(idTestNamespace2, AppWithMultipleSchedules.NAME);
ApplicationId app1 = testNamespace2.app(AppWithMultipleSchedules.NAME, VERSION1);
ApplicationId app2 = testNamespace2.app(AppWithMultipleSchedules.NAME, VERSION2);
Assert.assertEquals(200, deploy(appDefault, appRequest).getStatusLine().getStatusCode());
Assert.assertEquals(200, deploy(app1, appRequest).getStatusLine().getStatusCode());
Assert.assertEquals(200, deploy(app2, appRequest).getStatusLine().getStatusCode());
// Schedule details from non-versioned API
List<ScheduleDetail> someSchedules = getSchedules(TEST_NAMESPACE2, AppWithMultipleSchedules.NAME, AppWithMultipleSchedules.SOME_WORKFLOW);
Assert.assertEquals(2, someSchedules.size());
Assert.assertEquals(AppWithMultipleSchedules.SOME_WORKFLOW, someSchedules.get(0).getProgram().getProgramName());
Assert.assertEquals(AppWithMultipleSchedules.SOME_WORKFLOW, someSchedules.get(1).getProgram().getProgramName());
// Schedule details from non-versioned API
List<ScheduleDetail> anotherSchedules = getSchedules(TEST_NAMESPACE2, AppWithMultipleSchedules.NAME, AppWithMultipleSchedules.ANOTHER_WORKFLOW);
Assert.assertEquals(3, anotherSchedules.size());
Assert.assertEquals(AppWithMultipleSchedules.ANOTHER_WORKFLOW, anotherSchedules.get(0).getProgram().getProgramName());
Assert.assertEquals(AppWithMultipleSchedules.ANOTHER_WORKFLOW, anotherSchedules.get(1).getProgram().getProgramName());
Assert.assertEquals(AppWithMultipleSchedules.ANOTHER_WORKFLOW, anotherSchedules.get(2).getProgram().getProgramName());
// Schedule details from non-versioned API filtered by Trigger type
List<ScheduleDetail> filteredTimeSchedules = getSchedules(TEST_NAMESPACE2, AppWithMultipleSchedules.NAME, AppWithMultipleSchedules.TRIGGERED_WORKFLOW, ProtoTrigger.Type.TIME);
Assert.assertEquals(1, filteredTimeSchedules.size());
assertProgramInSchedules(AppWithMultipleSchedules.TRIGGERED_WORKFLOW, filteredTimeSchedules);
// Schedule details from non-versioned API filtered by Trigger type
List<ScheduleDetail> programStatusSchedules = getSchedules(TEST_NAMESPACE2, AppWithMultipleSchedules.NAME, AppWithMultipleSchedules.TRIGGERED_WORKFLOW, ProtoTrigger.Type.PROGRAM_STATUS);
Assert.assertEquals(4, programStatusSchedules.size());
assertProgramInSchedules(AppWithMultipleSchedules.TRIGGERED_WORKFLOW, programStatusSchedules);
deleteApp(appDefault, 200);
// Schedule of app1 from versioned API
List<ScheduleDetail> someSchedules1 = getSchedules(TEST_NAMESPACE2, AppWithMultipleSchedules.NAME, VERSION1, AppWithMultipleSchedules.SOME_WORKFLOW);
Assert.assertEquals(2, someSchedules1.size());
assertProgramInSchedules(AppWithMultipleSchedules.SOME_WORKFLOW, someSchedules1);
// Schedule details from versioned API filtered by Trigger type
filteredTimeSchedules = getSchedules(TEST_NAMESPACE2, AppWithMultipleSchedules.NAME, VERSION1, AppWithMultipleSchedules.TRIGGERED_WORKFLOW, ProtoTrigger.Type.TIME);
Assert.assertEquals(1, filteredTimeSchedules.size());
assertProgramInSchedules(AppWithMultipleSchedules.TRIGGERED_WORKFLOW, filteredTimeSchedules);
// Schedule details from versioned API filtered by Trigger type
programStatusSchedules = getSchedules(TEST_NAMESPACE2, AppWithMultipleSchedules.NAME, VERSION1, AppWithMultipleSchedules.TRIGGERED_WORKFLOW, ProtoTrigger.Type.PROGRAM_STATUS);
Assert.assertEquals(4, programStatusSchedules.size());
assertProgramInSchedules(AppWithMultipleSchedules.TRIGGERED_WORKFLOW, programStatusSchedules);
// Schedules triggered by SOME_WORKFLOW's completed or failed or killed status
ProgramId someWorkflow = app1.workflow(AppWithMultipleSchedules.SOME_WORKFLOW);
List<ScheduleDetail> triggeredSchedules1 = listSchedulesByTriggerProgram(TEST_NAMESPACE2, someWorkflow, ProgramStatus.COMPLETED, ProgramStatus.FAILED, ProgramStatus.KILLED);
Assert.assertEquals(3, triggeredSchedules1.size());
assertProgramInSchedules(AppWithMultipleSchedules.TRIGGERED_WORKFLOW, triggeredSchedules1);
List<ScheduleDetail> filteredSchedules = listSchedulesByTriggerProgram(TEST_NAMESPACE2, someWorkflow, ProgramScheduleStatus.SCHEDULED, ProgramStatus.COMPLETED, ProgramStatus.FAILED, ProgramStatus.KILLED);
// No schedule is enabled yet
Assert.assertEquals(0, filteredSchedules.size());
filteredSchedules = listSchedulesByTriggerProgram(TEST_NAMESPACE2, someWorkflow, ProgramScheduleStatus.SUSPENDED, ProgramStatus.COMPLETED, ProgramStatus.FAILED, ProgramStatus.KILLED);
// All schedules are suspended
Assert.assertEquals(3, filteredSchedules.size());
// Schedules triggered by SOME_WORKFLOW's completed status
List<ScheduleDetail> triggeredByCompletedSchedules = listSchedulesByTriggerProgram(TEST_NAMESPACE2, someWorkflow, ProgramStatus.COMPLETED);
Assert.assertEquals(2, triggeredByCompletedSchedules.size());
assertProgramInSchedules(AppWithMultipleSchedules.TRIGGERED_WORKFLOW, triggeredByCompletedSchedules);
// Schedules triggered by ANOTHER_WORKFLOW regardless of program status
ProgramId anotherWorkflow = app1.workflow(AppWithMultipleSchedules.ANOTHER_WORKFLOW);
List<ScheduleDetail> triggeredSchedules2 = listSchedulesByTriggerProgram(TEST_NAMESPACE2, anotherWorkflow);
Assert.assertEquals(1, triggeredSchedules2.size());
assertProgramInSchedules(AppWithMultipleSchedules.TRIGGERED_WORKFLOW, triggeredSchedules2);
deleteApp(app1, 200);
// Schedule detail of app2 from versioned API
List<ScheduleDetail> anotherSchedules2 = getSchedules(TEST_NAMESPACE2, AppWithMultipleSchedules.NAME, VERSION2, AppWithMultipleSchedules.ANOTHER_WORKFLOW);
Assert.assertEquals(3, anotherSchedules2.size());
assertProgramInSchedules(AppWithMultipleSchedules.ANOTHER_WORKFLOW, anotherSchedules2);
deleteApp(app2, 200);
}
use of co.cask.cdap.api.artifact.ArtifactSummary in project cdap by caskdata.
the class DataQualityAppTest method testDefaultConfig.
@Test
public void testDefaultConfig() throws Exception {
Map<String, Set<String>> testMap = new HashMap<>();
Set<String> testSet = new HashSet<>();
testSet.add("DiscreteValuesHistogram");
testMap.put("content_length", testSet);
DataQualityApp.DataQualityConfig config = new DataQualityApp.DataQualityConfig(WORKFLOW_SCHEDULE_MINUTES, getStreamSource(), "dataQuality", testMap);
ApplicationId appId = NamespaceId.DEFAULT.app("newApp");
AppRequest<DataQualityApp.DataQualityConfig> appRequest = new AppRequest<>(new ArtifactSummary(appArtifact.getArtifact(), appArtifact.getVersion()), config);
ApplicationManager applicationManager = deployApplication(appId, appRequest);
MapReduceManager mrManager = applicationManager.getMapReduceManager("FieldAggregator").start();
mrManager.waitForRun(ProgramRunStatus.COMPLETED, 180, TimeUnit.SECONDS);
Table logDataStore = (Table) getDataset("dataQuality").get();
DiscreteValuesHistogram discreteValuesHistogramAggregationFunction = new DiscreteValuesHistogram();
Row row;
try (Scanner scanner = logDataStore.scan(null, null)) {
while ((row = scanner.next()) != null) {
if (Bytes.toString(row.getRow()).contains("content_length")) {
Map<byte[], byte[]> columnsMapBytes = row.getColumns();
byte[] output = columnsMapBytes.get(Bytes.toBytes("DiscreteValuesHistogram"));
if (output != null) {
discreteValuesHistogramAggregationFunction.combine(output);
}
}
}
}
Map<String, Integer> outputMap = discreteValuesHistogramAggregationFunction.retrieveAggregation();
Map<String, Integer> expectedMap = Maps.newHashMap();
expectedMap.put("256", 3);
Assert.assertEquals(expectedMap, outputMap);
}
use of co.cask.cdap.api.artifact.ArtifactSummary in project cdap by caskdata.
the class DataQualityAppTest method testInvalidConfig.
@Test(expected = IllegalStateException.class)
public void testInvalidConfig() throws Exception {
ApplicationId appId = NamespaceId.DEFAULT.app("badApp");
Map<String, Set<String>> testMap = new HashMap<>();
// Empty aggregation set - should throw an exception while creating an application
testMap.put("content_length", new HashSet<String>());
DataQualityApp.DataQualityConfig config = new DataQualityApp.DataQualityConfig(50, getStreamSource(), "avg", testMap);
AppRequest<DataQualityApp.DataQualityConfig> appRequest = new AppRequest<>(new ArtifactSummary(appArtifact.getArtifact(), appArtifact.getVersion()), config);
deployApplication(appId, appRequest);
}
Aggregations