use of io.cdap.cdap.runtime.spi.provisioner.ProvisionerSpecification in project cdap by caskdata.
the class ProfileHttpHandlerTest method testPutAndDeleteProfiles.
@Test
public void testPutAndDeleteProfiles() throws Exception {
Profile invalidProfile = new Profile("MyProfile", "label", "my profile for testing", new ProvisionerInfo("nonExisting", PROPERTY_SUMMARIES));
// adding a profile with non-existing provisioner should get a 400
putProfile(NamespaceId.DEFAULT.profile(invalidProfile.getName()), invalidProfile, HttpURLConnection.HTTP_BAD_REQUEST);
// put a profile with the mock provisioner
Profile expected = new Profile("MyProfile", "label", "my profile for testing", new ProvisionerInfo(MockProvisioner.NAME, PROPERTY_SUMMARIES));
ProfileId expectedProfileId = NamespaceId.DEFAULT.profile(expected.getName());
putProfile(expectedProfileId, expected, HttpURLConnection.HTTP_OK);
// get the profile
Profile actual = getProfile(expectedProfileId, HttpURLConnection.HTTP_OK).get();
Assert.assertEquals(expected, actual);
// list all profiles, should get 2 profiles
List<Profile> profiles = listProfiles(NamespaceId.DEFAULT, true, HttpURLConnection.HTTP_OK);
Set<Profile> expectedList = ImmutableSet.of(Profile.NATIVE, expected);
Assert.assertEquals(expectedList.size(), profiles.size());
Assert.assertEquals(expectedList, new HashSet<>(profiles));
// adding the same profile should still succeed
putProfile(expectedProfileId, expected, HttpURLConnection.HTTP_OK);
// get non-existing profile should get a 404
deleteProfile(NamespaceId.DEFAULT.profile("nonExisting"), HttpURLConnection.HTTP_NOT_FOUND);
// delete the profile should fail first time since it is by default enabled
deleteProfile(expectedProfileId, HttpURLConnection.HTTP_CONFLICT);
// disable the profile then delete should work
disableProfile(expectedProfileId, HttpURLConnection.HTTP_OK);
deleteProfile(expectedProfileId, HttpURLConnection.HTTP_OK);
Assert.assertEquals(Collections.emptyList(), listProfiles(NamespaceId.DEFAULT, false, HttpURLConnection.HTTP_OK));
// if given some unrelated json, it should return a 400 instead of 500
ProvisionerSpecification spec = new MockProvisioner().getSpec();
ProvisionerDetail test = new ProvisionerDetail(spec.getName(), spec.getLabel(), spec.getDescription(), new ArrayList<>(), null, null, false);
putProfile(NamespaceId.DEFAULT.profile(test.getName()), test, HttpURLConnection.HTTP_BAD_REQUEST);
doAs(READ_ONLY_USER_NAME, () -> {
putProfile(expectedProfileId, expected, HttpURLConnection.HTTP_FORBIDDEN);
disableProfile(expectedProfileId, HttpURLConnection.HTTP_FORBIDDEN);
enableProfile(expectedProfileId, HttpURLConnection.HTTP_FORBIDDEN);
deleteProfile(expectedProfileId, HttpURLConnection.HTTP_FORBIDDEN);
});
doAs(READ_WRITE_USER_NAME, () -> {
putProfile(expectedProfileId, expected, HttpURLConnection.HTTP_OK);
disableProfile(expectedProfileId, HttpURLConnection.HTTP_OK);
enableProfile(expectedProfileId, HttpURLConnection.HTTP_OK);
disableProfile(expectedProfileId, HttpURLConnection.HTTP_OK);
deleteProfile(expectedProfileId, HttpURLConnection.HTTP_OK);
});
}
use of io.cdap.cdap.runtime.spi.provisioner.ProvisionerSpecification in project cdap by caskdata.
the class ProvisionerHttpHandlerTest method testListAndGetProvisioners.
@Test
public void testListAndGetProvisioners() throws Exception {
// in unit test, we have the mock provisioners currently
ProvisionerSpecification spec = new MockProvisioner().getSpec();
ProvisionerDetail expected = new ProvisionerDetail(spec.getName(), spec.getLabel(), spec.getDescription(), new ArrayList<>(), null, null, false);
ProvisionerSpecification specWithCpus = new MockProvisionerWithCpus().getSpec();
ProvisionerDetail expectedWithCpus = new ProvisionerDetail(specWithCpus.getName(), specWithCpus.getLabel(), specWithCpus.getDescription(), new ArrayList<>(), null, null, false);
List<ProvisionerDetail> details = listProvisioners();
Assert.assertEquals(ImmutableList.of(expected, expectedWithCpus), details);
// get a non-existing provisioner should get a 404
getProvisioner("nonExisting", 404);
// get the mock provisioner
Assert.assertEquals(expected, getProvisioner(MockProvisioner.NAME, 200));
}
use of io.cdap.cdap.runtime.spi.provisioner.ProvisionerSpecification in project cdap by caskdata.
the class ProvisioningService method initializeProvisioners.
/**
* Reloads provisioners in the extension directory. Any new provisioners will be added and any deleted provisioners
* will be removed. Loaded provisioners will be initialized.
*/
private void initializeProvisioners() {
Map<String, Provisioner> provisioners = provisionerProvider.loadProvisioners();
Map<String, ProvisionerConfig> provisionerConfigs = provisionerConfigProvider.loadProvisionerConfigs(provisioners.values());
LOG.debug("Provisioners = {}", provisioners);
Map<String, ProvisionerDetail> details = new HashMap<>(provisioners.size());
for (Map.Entry<String, Provisioner> provisionerEntry : provisioners.entrySet()) {
String provisionerName = provisionerEntry.getKey();
Provisioner provisioner = provisionerEntry.getValue();
ProvisionerSystemContext provisionerSystemContext = new DefaultSystemProvisionerContext(cConf, provisionerName);
try {
provisioner.initialize(provisionerSystemContext);
} catch (RuntimeException e) {
LOG.warn("Error initializing the {} provisioner. It will not be available for use.", provisionerName, e);
provisioners.remove(provisionerName);
continue;
}
ProvisionerSpecification spec = provisioner.getSpec();
ProvisionerConfig config = provisionerConfigs.getOrDefault(provisionerName, new ProvisionerConfig(new ArrayList<>(), null, null, false));
details.put(provisionerName, new ProvisionerDetail(spec.getName(), spec.getLabel(), spec.getDescription(), config.getConfigurationGroups(), config.getFilters(), config.getIcon(), config.isBeta()));
}
provisionerInfo.set(new ProvisionerInfo(provisioners, details));
}
use of io.cdap.cdap.runtime.spi.provisioner.ProvisionerSpecification in project cdap by caskdata.
the class ProvisioningServiceTest method testGetSpecs.
@Test
public void testGetSpecs() {
Collection<ProvisionerDetail> specs = provisioningService.getProvisionerDetails();
Assert.assertEquals(2, specs.size());
ProvisionerSpecification spec = new MockProvisioner().getSpec();
ProvisionerDetail expected = new ProvisionerDetail(spec.getName(), spec.getLabel(), spec.getDescription(), new ArrayList<>(), null, null, false);
Assert.assertEquals(expected, specs.iterator().next());
Assert.assertEquals(expected, provisioningService.getProvisionerDetail(MockProvisioner.NAME));
Assert.assertNull(provisioningService.getProvisionerDetail("abc"));
}
Aggregations