Search in sources :

Example 1 with CapabilitySleepingWorkflowApp

use of io.cdap.cdap.CapabilitySleepingWorkflowApp in project cdap by caskdata.

the class CapabilityManagementServiceTest method testProgramStart.

@Test
public void testProgramStart() throws Exception {
    String externalConfigPath = tmpFolder.newFolder("capability-config-program").getAbsolutePath();
    cConfiguration.set(Constants.Capability.CONFIG_DIR, externalConfigPath);
    String appName = CapabilitySleepingWorkflowApp.NAME;
    Class<CapabilitySleepingWorkflowApp> appClass = CapabilitySleepingWorkflowApp.class;
    String version = "1.0.0";
    String namespace = "default";
    // deploy the artifact
    deployTestArtifact(namespace, appName, version, appClass);
    // enable a capability with no system apps and programs
    CapabilityConfig enabledConfig = new CapabilityConfig("Enable healthcare", CapabilityStatus.ENABLED, "healthcare", Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
    writeConfigAsFile(externalConfigPath, enabledConfig.getCapability(), enabledConfig);
    capabilityManagementService.runTask();
    String capability = enabledConfig.getCapability();
    capabilityStatusStore.checkAllEnabled(Collections.singleton(capability));
    // deploy an app with this capability and start a workflow
    ApplicationId applicationId = new ApplicationId(namespace, appName);
    Id.Artifact artifactId = Id.Artifact.from(new Id.Namespace(namespace), appName, version);
    ApplicationWithPrograms applicationWithPrograms = applicationLifecycleService.deployApp(new NamespaceId(namespace), appName, null, artifactId, null, op -> {
    });
    Iterable<ProgramDescriptor> programs = applicationWithPrograms.getPrograms();
    for (ProgramDescriptor program : programs) {
        programLifecycleService.start(program.getProgramId(), new HashMap<>(), false, false);
    }
    ProgramId programId = new ProgramId(applicationId, ProgramType.WORKFLOW, CapabilitySleepingWorkflowApp.SleepWorkflow.class.getSimpleName());
    // Capability management service might not yet have deployed application.
    // So wait till program exists and is in running state.
    waitState(programId, "RUNNING");
    assertProgramRuns(programId, ProgramRunStatus.RUNNING, 1);
    // disable the capability -  the program that was started should stop
    CapabilityConfig disabledConfig = new CapabilityConfig("Disable healthcare", CapabilityStatus.DISABLED, "healthcare", Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
    writeConfigAsFile(externalConfigPath, capability, disabledConfig);
    capabilityManagementService.runTask();
    assertProgramRuns(programId, ProgramRunStatus.KILLED, 1);
    assertProgramRuns(programId, ProgramRunStatus.RUNNING, 0);
    try {
        capabilityStatusStore.checkAllEnabled(Collections.singleton(capability));
        Assert.fail("expecting exception");
    } catch (CapabilityNotAvailableException ex) {
    }
    // try starting programs
    for (ProgramDescriptor program : programs) {
        try {
            programLifecycleService.start(program.getProgramId(), new HashMap<>(), false, false);
            Assert.fail("expecting exception");
        } catch (CapabilityNotAvailableException ex) {
        // expecting exception
        }
    }
    new File(externalConfigPath, capability).delete();
    capabilityManagementService.runTask();
    Assert.assertTrue(capabilityStatusStore.getConfigs(Collections.singleton(capability)).isEmpty());
}
Also used : CapabilitySleepingWorkflowApp(io.cdap.cdap.CapabilitySleepingWorkflowApp) ProgramId(io.cdap.cdap.proto.id.ProgramId) ApplicationWithPrograms(io.cdap.cdap.internal.app.deploy.pipeline.ApplicationWithPrograms) NamespaceId(io.cdap.cdap.proto.id.NamespaceId) Id(io.cdap.cdap.common.id.Id) ApplicationId(io.cdap.cdap.proto.id.ApplicationId) ProgramId(io.cdap.cdap.proto.id.ProgramId) NamespaceId(io.cdap.cdap.proto.id.NamespaceId) ProgramDescriptor(io.cdap.cdap.app.program.ProgramDescriptor) ApplicationId(io.cdap.cdap.proto.id.ApplicationId) File(java.io.File) Test(org.junit.Test)

Aggregations

CapabilitySleepingWorkflowApp (io.cdap.cdap.CapabilitySleepingWorkflowApp)1 ProgramDescriptor (io.cdap.cdap.app.program.ProgramDescriptor)1 Id (io.cdap.cdap.common.id.Id)1 ApplicationWithPrograms (io.cdap.cdap.internal.app.deploy.pipeline.ApplicationWithPrograms)1 ApplicationId (io.cdap.cdap.proto.id.ApplicationId)1 NamespaceId (io.cdap.cdap.proto.id.NamespaceId)1 ProgramId (io.cdap.cdap.proto.id.ProgramId)1 File (java.io.File)1 Test (org.junit.Test)1