/** * Overloaded method for conversion of VM images until support is available in the Service * Manifest for specifying desired format. Given an object of ServiceManifest containing the * details of the service to be contextualized, this function performs a number of operations * asynchronously. TODO: Remove After year 2 * * @param manifest Service Manifest to contextualize. * @param imageFormat Format to convert images to. Possible values are: "raw", "vmdk" and "qcow2" */ public void contextualizeService(Manifest manifest, String imageFormat) { Runnable virtualMachineContextualizer = new VirtualMachineContextualizer(this, manifest, imageFormat); Thread thread = new Thread(virtualMachineContextualizer); threads.put(manifest.getManifestId(), thread); thread.start(); }
/** * Tests the progress object callback function when we are 100% sure the state data has been * initialised. */ public void testContextualizeServiceWorkflow() { log.info("### TEST: " + getCurrentMethodName() + " STARTED ###"); ProgressData progressData = null; try { // Decide which manifest we are going to test with Manifest manifest; if (testManifest != null) { manifest = testManifest; } else { String serviceId = "3"; manifest = Manifest.Factory.newInstance(serviceId, "jboss"); } log.info("TEST: Service manifest is:\n" + manifest.toString()); // Initialise the VMC's configuration providing the path of the // config.properties file... GlobalConfiguration globalConfiguration; if (configFilePath != null) { globalConfiguration = new GlobalConfiguration(configFilePath); } else { globalConfiguration = new GlobalConfiguration(); } VmcApi vmcApi = new VmcApi(globalConfiguration); if (imageFormat == null) { vmcApi.contextualizeService(manifest); } else { vmcApi.contextualizeService(manifest, imageFormat); } // Wait until the service has been registered with the VMC before // polling the progress data... while (true) { try { log.info("TEST: Trying to fetch progress data..."); vmcApi.contextualizeServiceCallback(manifest.getManifestId()); log.info("TEST: No ProgressException..."); break; } catch (ProgressException e) { log.warn("TEST: Caught ProgressException due to: " + e.getMessage()); Thread.sleep(250); } } // Poll the progress data until the completion... while (true) { // We have progress data, do something with it... progressData = vmcApi.contextualizeServiceCallback(manifest.getManifestId()); // We have an error so stop everything! if (progressData.isError()) { // Say what the error is... log.error(progressData.getException().getMessage(), progressData.getException()); assertFalse(progressData.isError()); // For test case to // report failure // correctly return; } else { log.info( "TEST: contextualizeServiceCallbackObject total progress is: " + progressData.getTotalProgress()); log.info( "TEST: contextualizeServiceCallbackObject phase history of Phase with ID: " + progressData.getPhaseName(progressData.getCurrentPhaseId()) + ", % is: " + progressData.getHistory().get(progressData.getCurrentPhaseId())); } // 250ms delay between polling... Thread.sleep(250); // Test to see if contextualization has finished... if (vmcApi.contextualizeServiceCallback(manifest.getManifestId()).isComplete()) { log.warn("TEST: Detected contextualization has completed!"); break; } } // Test that the new manifest has been set... assertTrue(progressData.getManifest() != null); log.info( "TEST: contextualizeServiceCallbackObject altered manifest is: \n" + progressData.getManifest().toString()); // Test that the history is saved correctly in the progress data. for (int i = 0; i < progressData.getHistory().size(); i++) { log.info( "TEST: contextualizeServiceCallbackObject history of Phase with ID: " + progressData.getPhaseName(i) + ", % is: " + progressData.getHistory().get(i)); } } catch (Exception e) { log.error("TEST: Test Failed! Cause: " + e.getCause(), e); } log.warn("### TEST: " + getCurrentMethodName() + " COMPLETE ###"); }