use of io.cdap.cdap.proto.id.DatasetModuleId in project cdap by cdapio.
the class HiveExploreStructuredRecordTestRun method start.
@BeforeClass
public static void start() throws Exception {
initialize(tmpFolder);
DatasetModuleId moduleId = NAMESPACE_ID.datasetModule("email");
datasetFramework.addModule(moduleId, new EmailTableDefinition.EmailTableModule());
datasetFramework.addInstance("email", MY_TABLE, DatasetProperties.EMPTY);
transactional = Transactions.createTransactional(new MultiThreadDatasetCache(new SystemDatasetInstantiator(datasetFramework), transactionSystemClient, NAMESPACE_ID, Collections.<String, String>emptyMap(), null, null));
transactional.execute(new TxRunnable() {
@Override
public void run(DatasetContext context) throws Exception {
// Accessing dataset instance to perform data operations
EmailTableDefinition.EmailTable table = context.getDataset(MY_TABLE.getDataset());
Assert.assertNotNull(table);
table.writeEmail("email1", "this is the subject", "this is the body", "sljackson@boss.com");
}
});
datasetFramework.addModule(NAMESPACE_ID.datasetModule("TableWrapper"), new TableWrapperDefinition.Module());
}
use of io.cdap.cdap.proto.id.DatasetModuleId in project cdap by cdapio.
the class DatasetClientTestRun method testAll.
@Test
public void testAll() throws Exception {
DatasetModuleId module = TEST_NAMESPACE.datasetModule(StandaloneDatasetModule.NAME);
DatasetTypeId type = TEST_NAMESPACE.datasetType(StandaloneDataset.class.getName());
DatasetModuleId moduleInOtherNamespace = OTHER_NAMESPACE.datasetModule(StandaloneDatasetModule.NAME);
DatasetTypeId typeInOtherNamespace = OTHER_NAMESPACE.datasetType(StandaloneDataset.class.getName());
int numBaseModules = moduleClient.list(TEST_NAMESPACE).size();
int numBaseTypes = typeClient.list(TEST_NAMESPACE).size();
LOG.info("Adding Dataset module");
File moduleJarFile = createAppJarFile(StandaloneDatasetModule.class);
moduleClient.add(TEST_NAMESPACE.datasetModule(StandaloneDatasetModule.NAME), StandaloneDatasetModule.class.getName(), moduleJarFile);
Assert.assertEquals(numBaseModules + 1, moduleClient.list(TEST_NAMESPACE).size());
Assert.assertEquals(numBaseTypes + 2, typeClient.list(TEST_NAMESPACE).size());
LOG.info("Checking that the new Dataset module exists");
DatasetModuleMeta datasetModuleMeta = moduleClient.get(module);
Assert.assertNotNull(datasetModuleMeta);
Assert.assertEquals(StandaloneDatasetModule.NAME, datasetModuleMeta.getName());
LOG.info("Checking that the new Dataset module does not exist in a different namespace");
try {
moduleClient.get(moduleInOtherNamespace);
Assert.fail("datasetModule found in namespace other than one in which it was expected");
} catch (DatasetModuleNotFoundException expected) {
// expected
}
LOG.info("Checking that the new Dataset type exists");
DatasetTypeMeta datasetTypeMeta = typeClient.get(type);
Assert.assertNotNull(datasetTypeMeta);
Assert.assertEquals(type.getType(), datasetTypeMeta.getName());
datasetTypeMeta = typeClient.get(type);
Assert.assertNotNull(datasetTypeMeta);
Assert.assertEquals(StandaloneDataset.class.getName(), datasetTypeMeta.getName());
LOG.info("Checking that the new Dataset type does not exist in a different namespace");
try {
typeClient.get(typeInOtherNamespace);
Assert.fail("datasetType found in namespace other than one in which it was expected");
} catch (DatasetTypeNotFoundException expected) {
// expected
}
LOG.info("Creating, truncating, and deleting dataset of new Dataset type");
// Before creating dataset, there are some system datasets already exist
int numBaseDataset = datasetClient.list(TEST_NAMESPACE).size();
DatasetId instance = TEST_NAMESPACE.dataset("testDataset");
String description = "test description";
datasetClient.create(instance, new DatasetInstanceConfiguration(StandaloneDataset.TYPE_NAME, Collections.<String, String>emptyMap(), description, null));
Assert.assertEquals(numBaseDataset + 1, datasetClient.list(TEST_NAMESPACE).size());
// Assert dataset summary for the newly created dataset
DatasetSpecificationSummary expectedSpec = new DatasetSpecificationSummary(instance.getDataset(), StandaloneDataset.TYPE_NAME, description, Collections.<String, String>emptyMap());
Assert.assertEquals(expectedSpec, getSpecForDataset(instance, datasetClient.list(TEST_NAMESPACE)));
datasetClient.truncate(instance);
DatasetMeta metaBefore = datasetClient.get(instance);
Assert.assertEquals(0, metaBefore.getSpec().getProperties().size());
datasetClient.update(instance, ImmutableMap.of("sdf", "foo", "abc", "123"));
DatasetMeta metaAfter = datasetClient.get(instance);
Assert.assertEquals(2, metaAfter.getSpec().getProperties().size());
Assert.assertTrue(metaAfter.getSpec().getProperties().containsKey("sdf"));
Assert.assertTrue(metaAfter.getSpec().getProperties().containsKey("abc"));
Assert.assertEquals("foo", metaAfter.getSpec().getProperties().get("sdf"));
Assert.assertEquals("123", metaAfter.getSpec().getProperties().get("abc"));
datasetClient.updateExisting(instance, ImmutableMap.of("sdf", "fzz"));
metaAfter = datasetClient.get(instance);
Assert.assertEquals(2, metaAfter.getSpec().getProperties().size());
Assert.assertTrue(metaAfter.getSpec().getProperties().containsKey("sdf"));
Assert.assertTrue(metaAfter.getSpec().getProperties().containsKey("abc"));
Assert.assertEquals("fzz", metaAfter.getSpec().getProperties().get("sdf"));
Assert.assertEquals("123", metaAfter.getSpec().getProperties().get("abc"));
datasetClient.delete(instance);
Assert.assertEquals(numBaseDataset, datasetClient.list(TEST_NAMESPACE).size());
LOG.info("Creating and deleting multiple Datasets");
for (int i = 1; i <= 3; i++) {
datasetClient.create(TEST_NAMESPACE.dataset("testDataset" + i), StandaloneDataset.TYPE_NAME);
}
Assert.assertEquals(numBaseDataset + 3, datasetClient.list(TEST_NAMESPACE).size());
for (int i = 1; i <= 3; i++) {
datasetClient.delete(TEST_NAMESPACE.dataset("testDataset" + i));
}
Assert.assertEquals(numBaseDataset, datasetClient.list(TEST_NAMESPACE).size());
LOG.info("Deleting Dataset module");
moduleClient.delete(module);
Assert.assertEquals(numBaseModules, moduleClient.list(TEST_NAMESPACE).size());
Assert.assertEquals(numBaseTypes, typeClient.list(TEST_NAMESPACE).size());
LOG.info("Adding Dataset module and then deleting all Dataset modules");
moduleClient.add(TEST_NAMESPACE.datasetModule("testModule1"), StandaloneDatasetModule.class.getName(), moduleJarFile);
Assert.assertEquals(numBaseModules + 1, moduleClient.list(TEST_NAMESPACE).size());
Assert.assertEquals(numBaseTypes + 2, typeClient.list(TEST_NAMESPACE).size());
moduleClient.deleteAll(TEST_NAMESPACE);
Assert.assertEquals(numBaseModules, moduleClient.list(TEST_NAMESPACE).size());
Assert.assertEquals(numBaseTypes, typeClient.list(TEST_NAMESPACE).size());
}
use of io.cdap.cdap.proto.id.DatasetModuleId in project cdap by cdapio.
the class DatasetTypeHandlerTest method testNotFound.
@Test
public void testNotFound() throws Exception {
NamespaceId nonExistent = new NamespaceId("nonExistent");
HttpResponse response = makeModulesRequest(nonExistent);
assertNamespaceNotFound(response, nonExistent);
response = makeTypesRequest(nonExistent);
assertNamespaceNotFound(response, nonExistent);
DatasetModuleId datasetModule = nonExistent.datasetModule("module");
response = makeModuleInfoRequest(datasetModule);
assertNamespaceNotFound(response, nonExistent);
DatasetTypeId datasetType = nonExistent.datasetType("type");
response = makeTypeInfoRequest(datasetType);
assertNamespaceNotFound(response, nonExistent);
response = deployModule(datasetModule, TestModule1.class);
assertNamespaceNotFound(response, nonExistent);
response = deleteModule(datasetModule);
assertNamespaceNotFound(response, nonExistent);
response = deleteModules(nonExistent);
assertNamespaceNotFound(response, nonExistent);
}
use of io.cdap.cdap.proto.id.DatasetModuleId in project cdap by cdapio.
the class DatasetServiceAuthorizationTest method testDatasetTypes.
@Test
public void testDatasetTypes() throws Exception {
final DatasetModuleId module1 = NamespaceId.DEFAULT.datasetModule("module1");
final DatasetModuleId module2 = NamespaceId.DEFAULT.datasetModule("module2");
final DatasetTypeId type1 = NamespaceId.DEFAULT.datasetType("datasetType1");
DatasetTypeId type1x = NamespaceId.DEFAULT.datasetType("datasetType1x");
final DatasetTypeId type2 = NamespaceId.DEFAULT.datasetType("datasetType2");
DatasetId datasetId = NamespaceId.DEFAULT.dataset("succeed");
SecurityRequestContext.setUserId(ALICE.getName());
final Location moduleJar = createModuleJar(TestModule1x.class);
assertAuthorizationFailure(() -> dsFramework.addModule(module1, new TestModule1x(), moduleJar), String.format("Expected module add operation to fail for %s because she does not have %s on %s", ALICE, StandardPermission.UPDATE, module1));
// grant alice ADMIN on module1
grantAndAssertSuccess(module1, ALICE, EnumSet.of(StandardPermission.UPDATE, StandardPermission.DELETE, StandardPermission.CREATE));
// grant all privileges needed to create a dataset
grantAndAssertSuccess(type1, ALICE, EnumSet.of(StandardPermission.UPDATE, StandardPermission.GET, StandardPermission.DELETE));
grantAndAssertSuccess(type1x, ALICE, EnumSet.of(StandardPermission.UPDATE, StandardPermission.GET, StandardPermission.DELETE));
grantAndAssertSuccess(datasetId, ALICE, EnumSet.allOf(StandardPermission.class));
dsFramework.addModule(module1, new TestModule1x(), moduleJar);
// all operations on module1 should succeed as alice
Assert.assertNotNull(dsFramework.getTypeInfo(type1));
Assert.assertNotNull(dsFramework.getTypeInfo(type1x));
// should be able to use the type from the module to add an instance as well
dsFramework.addInstance(type1x.getType(), datasetId, DatasetProperties.EMPTY);
// but should fail as Bob
SecurityRequestContext.setUserId(BOB.getName());
assertAuthorizationFailure(() -> dsFramework.addInstance(type1.getType(), NamespaceId.DEFAULT.dataset("fail"), DatasetProperties.EMPTY), String.format("Creating an instance of a type from %s should fail as %s does not have any privileges on it.", module1, BOB));
// granting CREATE on the module, BOB should now be able to create the dataset type
grantAndAssertSuccess(module2, BOB, EnumSet.of(StandardPermission.CREATE, StandardPermission.DELETE));
grantAndAssertSuccess(type2, BOB, EnumSet.of(StandardPermission.UPDATE, StandardPermission.GET));
// adding a module should now succeed as bob though, because bob has admin privilege on the module
dsFramework.addModule(module2, new TestModule2(), createModuleJar(TestModule2.class));
// get operation on module2 should succeed as Bob
Assert.assertNotNull(dsFramework.getTypeInfo(type2));
// but should fail as Alice since Alice does not have ADMIN on module2 or type2
SecurityRequestContext.setUserId(ALICE.getName());
assertAuthorizationFailure(() -> dsFramework.addInstance(type2.getType(), NamespaceId.DEFAULT.dataset("fail"), DatasetProperties.EMPTY), String.format("Creating an instance of a type from %s should fail as %s does not have any privileges on it.", module2, ALICE));
assertAuthorizationFailure(() -> dsFramework.deleteModule(module2), String.format("Deleting module %s should fail as %s does not have any privileges on it.", module2, ALICE));
SecurityRequestContext.setUserId(BOB.getName());
assertAuthorizationFailure(() -> dsFramework.deleteModule(module1), String.format("Deleting module %s should fail as %s does not have any privileges on it.", module1, BOB));
assertAuthorizationFailure(() -> dsFramework.deleteAllModules(NamespaceId.DEFAULT), String.format("Deleting all modules in %s should fail as %s does not have ADMIN privileges on it.", NamespaceId.DEFAULT, BOB));
// delete all instances so modules can be deleted
SecurityRequestContext.setUserId(ALICE.getName());
dsFramework.deleteAllInstances(NamespaceId.DEFAULT);
SecurityRequestContext.setUserId(BOB.getName());
// After granting admin on the modules, deleting all modules should succeed
grantAndAssertSuccess(module1, BOB, EnumSet.of(StandardPermission.UPDATE, StandardPermission.DELETE));
dsFramework.deleteAllModules(NamespaceId.DEFAULT);
}
use of io.cdap.cdap.proto.id.DatasetModuleId in project cdap by cdapio.
the class DatasetServiceAuthorizationTest method testNotFound.
@Test
public void testNotFound() throws Exception {
final DatasetId nonExistingInstance = NamespaceId.DEFAULT.dataset("notfound");
final DatasetModuleId nonExistingModule = NamespaceId.DEFAULT.datasetModule("notfound");
final DatasetTypeId nonExistingType = NamespaceId.DEFAULT.datasetType("notfound");
try {
// user will not be able to get the info about the instance since he does not have any privilege on the instance
dsFramework.getDatasetSpec(nonExistingInstance);
Assert.fail();
} catch (UnauthorizedException e) {
// Expected
}
try {
// user will not be able to check the existence on the instance since he does not have any privilege on the
// instance
dsFramework.hasInstance(nonExistingInstance);
Assert.fail();
} catch (UnauthorizedException e) {
// expected
}
SecurityRequestContext.setUserId(ALICE.getName());
// user need to have access to the dataset to do any operations, even though the dataset does not exist
grantAndAssertSuccess(nonExistingInstance, ALICE, EnumSet.allOf(StandardPermission.class));
grantAndAssertSuccess(nonExistingModule, ALICE, EnumSet.allOf(StandardPermission.class));
// after grant user should be able to check the dataset info
Assert.assertNull(dsFramework.getDatasetSpec(nonExistingInstance));
Assert.assertFalse(dsFramework.hasInstance(nonExistingInstance));
assertNotFound(() -> dsFramework.updateInstance(nonExistingInstance, DatasetProperties.EMPTY), String.format("Expected %s to not exist", nonExistingInstance));
assertNotFound(() -> dsFramework.deleteInstance(nonExistingInstance), String.format("Expected %s to not exist", nonExistingInstance));
assertNotFound(() -> dsFramework.truncateInstance(nonExistingInstance), String.format("Expected %s to not exist", nonExistingInstance));
assertAuthorizationFailure(() -> dsFramework.addInstance(nonExistingType.getType(), nonExistingInstance, DatasetProperties.EMPTY), "Alice needs to have READ/ADMIN on the dataset type to create the dataset");
assertNotFound(() -> dsFramework.deleteModule(nonExistingModule), String.format("Expected %s to not exist", nonExistingModule));
grantAndAssertSuccess(nonExistingType, ALICE, EnumSet.allOf(StandardPermission.class));
Assert.assertNull(String.format("Expected %s to not exist", nonExistingType), dsFramework.getTypeInfo(nonExistingType));
}
Aggregations