use of co.cask.cdap.test.FlowManager in project cdap by caskdata.
the class AuthorizationTest method testCrossNSFlowlet.
@Test
public void testCrossNSFlowlet() throws Exception {
createAuthNamespace();
ApplicationManager appManager = deployApplication(AUTH_NAMESPACE, CrossNsDatasetAccessApp.class);
// give BOB ALL permissions on the auth namespace so he can execute programs and also read the stream.
grantAndAssertSuccess(AUTH_NAMESPACE, BOB, EnumSet.allOf(Action.class));
// switch to BOB
SecurityRequestContext.setUserId(BOB.getName());
// Send data to stream as BOB this ensures that BOB can write to a stream in auth namespace
StreamManager streamManager = getStreamManager(AUTH_NAMESPACE.stream(CrossNsDatasetAccessApp.STREAM_NAME));
for (int i = 0; i < 10; i++) {
streamManager.send(String.valueOf(i).getBytes());
}
// switch to back to ALICE
SecurityRequestContext.setUserId(ALICE.getName());
final FlowManager flowManager = appManager.getFlowManager(CrossNsDatasetAccessApp.FLOW_NAME);
testSystemDatasetAccessFromFlowlet(flowManager);
testCrossNSDatasetAccessFromFlowlet(flowManager);
}
use of co.cask.cdap.test.FlowManager in project cdap by caskdata.
the class PurchaseAppTest method test.
@Test
public void test() throws Exception {
// Deploy the PurchaseApp application
ApplicationManager appManager = deployApplication(PurchaseApp.class);
// Start PurchaseFlow
FlowManager flowManager = appManager.getFlowManager("PurchaseFlow").start();
// Send stream events to the "purchaseStream" Stream
StreamManager streamManager = getStreamManager("purchaseStream");
streamManager.send("bob bought 3 apples for $30");
streamManager.send("joe bought 1 apple for $100");
streamManager.send("joe bought 10 pineapples for $20");
streamManager.send("cat bought 3 bottles for $12");
streamManager.send("cat bought 2 pops for $14");
try {
// Wait for the last Flowlet processing 5 events, or at most 15 seconds
RuntimeMetrics metrics = flowManager.getFlowletMetrics("collector");
metrics.waitForProcessed(5, 15, TimeUnit.SECONDS);
} finally {
flowManager.stop();
}
ServiceManager userProfileServiceManager = getUserProfileServiceManager(appManager);
// Add customer's profile information
URL userProfileUrl = new URL(userProfileServiceManager.getServiceURL(15, TimeUnit.SECONDS), UserProfileServiceHandler.USER_ENDPOINT);
HttpURLConnection userProfileConnection = (HttpURLConnection) userProfileUrl.openConnection();
String userProfileJson = "{'id' : 'joe', 'firstName': 'joe', 'lastName':'bernard', 'categories': ['fruits']}";
try {
userProfileConnection.setDoOutput(true);
userProfileConnection.setRequestMethod("POST");
userProfileConnection.getOutputStream().write(userProfileJson.getBytes(Charsets.UTF_8));
Assert.assertEquals(HttpURLConnection.HTTP_OK, userProfileConnection.getResponseCode());
} finally {
userProfileConnection.disconnect();
}
// Test service to retrieve customer's profile information
userProfileUrl = new URL(userProfileServiceManager.getServiceURL(15, TimeUnit.SECONDS), UserProfileServiceHandler.USER_ENDPOINT + "/joe");
userProfileConnection = (HttpURLConnection) userProfileUrl.openConnection();
Assert.assertEquals(HttpURLConnection.HTTP_OK, userProfileConnection.getResponseCode());
String customerJson;
try {
customerJson = new String(ByteStreams.toByteArray(userProfileConnection.getInputStream()), Charsets.UTF_8);
} finally {
userProfileConnection.disconnect();
}
UserProfile profileFromService = GSON.fromJson(customerJson, UserProfile.class);
Assert.assertEquals(profileFromService.getFirstName(), "joe");
Assert.assertEquals(profileFromService.getLastName(), "bernard");
// Run PurchaseHistoryWorkflow which will process the data
MapReduceManager mapReduceManager = appManager.getMapReduceManager(PurchaseHistoryBuilder.class.getSimpleName()).start();
mapReduceManager.waitForRun(ProgramRunStatus.COMPLETED, 3, TimeUnit.MINUTES);
// Start PurchaseHistoryService
ServiceManager purchaseHistoryServiceManager = appManager.getServiceManager(PurchaseHistoryService.SERVICE_NAME).start();
// Wait for service startup
purchaseHistoryServiceManager.waitForStatus(true);
// Test service to retrieve a customer's purchase history
URL url = new URL(purchaseHistoryServiceManager.getServiceURL(15, TimeUnit.SECONDS), "history/joe");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
Assert.assertEquals(HttpURLConnection.HTTP_OK, conn.getResponseCode());
String historyJson;
try {
historyJson = new String(ByteStreams.toByteArray(conn.getInputStream()), Charsets.UTF_8);
} finally {
conn.disconnect();
}
PurchaseHistory history = GSON.fromJson(historyJson, PurchaseHistory.class);
Assert.assertEquals("joe", history.getCustomer());
Assert.assertEquals(2, history.getPurchases().size());
UserProfile profileFromPurchaseHistory = history.getUserProfile();
Assert.assertEquals(profileFromPurchaseHistory.getFirstName(), "joe");
Assert.assertEquals(profileFromPurchaseHistory.getLastName(), "bernard");
}
use of co.cask.cdap.test.FlowManager in project cdap by caskdata.
the class HelloWorldTest method test.
@Test
public void test() throws Exception {
// Deploy the HelloWorld application
ApplicationManager appManager = deployApplication(HelloWorld.class);
// Start WhoFlow
FlowManager flowManager = appManager.getFlowManager("WhoFlow").start();
Assert.assertTrue(flowManager.isRunning());
// Send stream events to the "who" Stream
StreamManager streamManager = getStreamManager("who");
streamManager.send("1");
streamManager.send("2");
streamManager.send("3");
streamManager.send("4");
streamManager.send("5");
try {
// Wait for the last Flowlet processing 5 events, or at most 5 seconds
RuntimeMetrics metrics = flowManager.getFlowletMetrics("saver");
metrics.waitForProcessed(5, 5, TimeUnit.SECONDS);
} finally {
flowManager.stop();
Assert.assertFalse(flowManager.isRunning());
}
// Start Greeting service and use it
ServiceManager serviceManager = appManager.getServiceManager(HelloWorld.Greeting.SERVICE_NAME).start();
// Wait service startup
serviceManager.waitForStatus(true);
URL url = new URL(serviceManager.getServiceURL(), "greet");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
Assert.assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode());
String response;
try {
response = new String(ByteStreams.toByteArray(connection.getInputStream()), Charsets.UTF_8);
} finally {
connection.disconnect();
}
Assert.assertEquals("Hello 5!", response);
}
use of co.cask.cdap.test.FlowManager in project cdap by caskdata.
the class WebAnalyticsTest method testWebAnalytics.
@Test
public void testWebAnalytics() throws Exception {
// Deploy the Application
ApplicationManager appManager = deployApplication(WebAnalytics.class);
// Start the Flow
FlowManager flowManager = appManager.getFlowManager("WebAnalyticsFlow").start();
// Send events to the Stream
StreamManager streamManager = getStreamManager("log");
BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/access.log"), "UTF-8"));
int lines = 0;
try {
String line = reader.readLine();
while (line != null) {
streamManager.send(line);
lines++;
line = reader.readLine();
}
} finally {
reader.close();
}
// Wait for the flow to process all data
RuntimeMetrics flowletMetrics = flowManager.getFlowletMetrics("UniqueVisitor");
flowletMetrics.waitForProcessed(lines, 10, TimeUnit.SECONDS);
// Verify the unique count
UniqueVisitCount uniqueVisitCount = this.<UniqueVisitCount>getDataset("UniqueVisitCount").get();
Assert.assertEquals(3L, uniqueVisitCount.getCount("192.168.12.72"));
}
use of co.cask.cdap.test.FlowManager in project cdap by caskdata.
the class SparkKMeansAppTest method test.
@Test
public void test() throws Exception {
// Deploy the Application
ApplicationManager appManager = deployApplication(SparkKMeansApp.class);
// Start the Flow
FlowManager flowManager = appManager.getFlowManager("PointsFlow").start();
// Send a few points to the stream
StreamManager streamManager = getStreamManager("pointsStream");
// one cluster around (0, 500, 0) and another around (100, 0, 0)
for (int i = 0; i < 100; i++) {
double diff = Math.random() / 100;
streamManager.send(String.format("%f %f %f", diff, 500 + diff, diff));
streamManager.send(String.format("%f %f %f", 100 + diff, diff, diff));
}
// Wait for the events to be processed, or at most 5 seconds
RuntimeMetrics metrics = flowManager.getFlowletMetrics("reader");
metrics.waitForProcessed(200, 10, TimeUnit.SECONDS);
// Start a Spark Program
SparkManager sparkManager = appManager.getSparkManager("SparkKMeansProgram").start();
sparkManager.waitForRun(ProgramRunStatus.COMPLETED, 60, TimeUnit.SECONDS);
flowManager.stop();
// Start CentersService
ServiceManager serviceManager = appManager.getServiceManager(SparkKMeansApp.CentersService.SERVICE_NAME).start();
// Wait service startup
serviceManager.waitForStatus(true);
// Request data and verify it
String response = requestService(new URL(serviceManager.getServiceURL(15, TimeUnit.SECONDS), "centers/0"));
String[] coordinates = response.split(",");
int x0 = Double.valueOf(coordinates[0]).intValue();
int y0 = Double.valueOf(coordinates[1]).intValue();
int z0 = Double.valueOf(coordinates[2]).intValue();
response = requestService(new URL(serviceManager.getServiceURL(15, TimeUnit.SECONDS), "centers/1"));
coordinates = response.split(",");
int x1 = Double.valueOf(coordinates[0]).intValue();
int y1 = Double.valueOf(coordinates[1]).intValue();
int z1 = Double.valueOf(coordinates[2]).intValue();
// one cluster should be around (0, 500, 0) and the other around (100, 0, 0)
if (x0 == 100) {
Assert.assertEquals(0, y0);
Assert.assertEquals(0, z0);
Assert.assertEquals(0, x1);
Assert.assertEquals(500, y1);
Assert.assertEquals(0, z1);
} else {
Assert.assertEquals(0, x0);
Assert.assertEquals(500, y0);
Assert.assertEquals(0, z0);
Assert.assertEquals(100, x1);
Assert.assertEquals(0, y1);
Assert.assertEquals(0, z1);
}
// Request data by incorrect index and verify response
URL url = new URL(serviceManager.getServiceURL(15, TimeUnit.SECONDS), "centers/10");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
try {
Assert.assertEquals(HttpURLConnection.HTTP_NO_CONTENT, conn.getResponseCode());
} finally {
conn.disconnect();
}
}
Aggregations