use of co.cask.cdap.api.metadata.Metadata in project cdap by caskdata.
the class AuditMessageTest method testMetadataChange.
@Test
public void testMetadataChange() throws Exception {
String metadataJson = "{\"version\":1,\"time\":3000,\"entityId\":{\"namespace\":\"ns1\",\"application\":\"app1\",\"version\":\"v1\"," + "\"entity\":\"APPLICATION\"},\"user\":\"user1\",\"type\":\"METADATA_CHANGE\",\"payload\":{" + "\"previous\":{\"USER\":{\"properties\":{\"uk\":\"uv\",\"uk1\":\"uv2\"},\"tags\":[\"ut1\",\"ut2\"]}," + "\"SYSTEM\":{\"properties\":{\"sk\":\"sv\"},\"tags\":[]}}," + "\"additions\":{\"SYSTEM\":{\"properties\":{\"sk\":\"sv\"},\"tags\":[\"t1\",\"t2\"]}}," + "\"deletions\":{\"USER\":{\"properties\":{\"uk\":\"uv\"},\"tags\":[\"ut1\"]}}}}";
Map<String, String> userProperties = new HashMap<>();
userProperties.put("uk", "uv");
userProperties.put("uk1", "uv2");
Map<String, String> systemProperties = new HashMap<>();
systemProperties.put("sk", "sv");
Set<String> userTags = new LinkedHashSet<>();
userTags.add("ut1");
userTags.add("ut2");
Map<MetadataScope, Metadata> previous = new LinkedHashMap<>();
previous.put(MetadataScope.USER, new Metadata(Collections.unmodifiableMap(userProperties), Collections.unmodifiableSet(userTags)));
previous.put(MetadataScope.SYSTEM, new Metadata(Collections.unmodifiableMap(systemProperties), Collections.unmodifiableSet(new LinkedHashSet<String>())));
Map<String, String> sysPropertiesAdded = new HashMap<>();
sysPropertiesAdded.put("sk", "sv");
Set<String> systemTagsAdded = new LinkedHashSet<>();
systemTagsAdded.add("t1");
systemTagsAdded.add("t2");
Map<MetadataScope, Metadata> additions = new HashMap<>();
additions.put(MetadataScope.SYSTEM, new Metadata(Collections.unmodifiableMap(sysPropertiesAdded), Collections.unmodifiableSet(systemTagsAdded)));
Map<String, String> userPropertiesDeleted = new HashMap<>();
userPropertiesDeleted.put("uk", "uv");
Set<String> userTagsDeleted = new LinkedHashSet<>();
userTagsDeleted.add("ut1");
Map<MetadataScope, Metadata> deletions = new HashMap<>();
deletions.put(MetadataScope.USER, new Metadata(Collections.unmodifiableMap(userPropertiesDeleted), Collections.unmodifiableSet(userTagsDeleted)));
AuditMessage metadataChange = new AuditMessage(3000L, new NamespaceId("ns1").app("app1", "v1"), "user1", AuditType.METADATA_CHANGE, new MetadataPayload(previous, additions, deletions));
Assert.assertEquals(jsonToMap(metadataJson), jsonToMap(GSON.toJson(metadataChange)));
Assert.assertEquals(metadataChange, GSON.fromJson(metadataJson, AuditMessage.class));
}
use of co.cask.cdap.api.metadata.Metadata in project cdap by caskdata.
the class SystemMetadataAuditPublishTest method getAllSystemMetadata.
private Set<String> getAllSystemMetadata() {
Set<String> allMetadata = new HashSet<>();
for (AuditMessage auditMessage : getMetadataUpdateMessages()) {
AuditPayload payload = auditMessage.getPayload();
Assert.assertTrue(payload instanceof MetadataPayload);
MetadataPayload metadataPayload = (MetadataPayload) payload;
Map<MetadataScope, Metadata> additions = metadataPayload.getAdditions();
if (additions.containsKey(MetadataScope.SYSTEM)) {
allMetadata.addAll(additions.get(MetadataScope.SYSTEM).getProperties().keySet());
allMetadata.addAll(additions.get(MetadataScope.SYSTEM).getTags());
}
Map<MetadataScope, Metadata> deletions = metadataPayload.getDeletions();
if (deletions.containsKey(MetadataScope.SYSTEM)) {
allMetadata.addAll(deletions.get(MetadataScope.SYSTEM).getProperties().keySet());
allMetadata.addAll(deletions.get(MetadataScope.SYSTEM).getTags());
}
}
return allMetadata;
}
use of co.cask.cdap.api.metadata.Metadata in project cdap by caskdata.
the class MetadataHttpHandlerTestRun method testSearchMetadata.
@Test
public void testSearchMetadata() throws Exception {
appClient.deploy(NamespaceId.DEFAULT, createAppJarFile(AllProgramsApp.class));
Map<NamespacedEntityId, Metadata> expectedUserMetadata = new HashMap<>();
// Add metadata to app
Map<String, String> props = ImmutableMap.of("key1", "value1");
Set<String> tags = ImmutableSet.of("tag1", "tag2");
ApplicationId appId = NamespaceId.DEFAULT.app(AllProgramsApp.NAME);
addProperties(appId, props);
addTags(appId, tags);
expectedUserMetadata.put(appId, new Metadata(props, tags));
// Add metadata to stream
props = ImmutableMap.of("key10", "value10", "key11", "value11");
tags = ImmutableSet.of("tag11");
StreamId streamId = NamespaceId.DEFAULT.stream(AllProgramsApp.STREAM_NAME);
addProperties(streamId, props);
addTags(streamId, tags);
expectedUserMetadata.put(streamId, new Metadata(props, tags));
Set<MetadataSearchResultRecord> results = super.searchMetadata(NamespaceId.DEFAULT, "value*", ImmutableSet.<EntityTypeSimpleName>of());
// Verify results
Assert.assertEquals(expectedUserMetadata.keySet(), getEntities(results));
for (MetadataSearchResultRecord result : results) {
// User metadata has to match exactly since we know what we have set
Assert.assertEquals(expectedUserMetadata.get(result.getEntityId()), result.getMetadata().get(MetadataScope.USER));
// Make sure system metadata is returned, we cannot check for exact match since we haven't set it
Metadata systemMetadata = result.getMetadata().get(MetadataScope.SYSTEM);
Assert.assertNotNull(systemMetadata);
Assert.assertFalse(systemMetadata.getProperties().isEmpty());
Assert.assertFalse(systemMetadata.getTags().isEmpty());
}
}
use of co.cask.cdap.api.metadata.Metadata in project cdap by caskdata.
the class MetadataStoreTest method testSearchWeight.
@Test
public void testSearchWeight() throws Exception {
ProgramId flow1 = new ProgramId("ns1", "app1", ProgramType.FLOW, "flow1");
StreamId stream1 = new StreamId("ns1", "s1");
DatasetId dataset1 = new DatasetId("ns1", "ds1");
// Add metadata
String multiWordValue = "aV1 av2 , - , av3 - av4_av5 av6";
Map<String, String> flowUserProps = ImmutableMap.of("key1", "value1", "key2", "value2", "multiword", multiWordValue);
Map<String, String> flowSysProps = ImmutableMap.of("sysKey1", "sysValue1");
Set<String> flowUserTags = ImmutableSet.of("tag1", "tag2");
Set<String> streamUserTags = ImmutableSet.of("tag3", "tag4");
Set<String> flowSysTags = ImmutableSet.of("sysTag1");
store.setProperties(MetadataScope.USER, flow1, flowUserProps);
store.setProperties(MetadataScope.SYSTEM, flow1, flowSysProps);
store.addTags(MetadataScope.USER, flow1, flowUserTags.toArray(new String[flowUserTags.size()]));
store.addTags(MetadataScope.SYSTEM, flow1, flowSysTags.toArray(new String[flowSysTags.size()]));
store.addTags(MetadataScope.USER, stream1, streamUserTags.toArray(new String[streamUserTags.size()]));
store.removeTags(MetadataScope.USER, stream1, streamUserTags.toArray(new String[streamUserTags.size()]));
store.setProperties(MetadataScope.USER, stream1, flowUserProps);
store.removeProperties(MetadataScope.USER, stream1, "key1", "key2", "multiword");
Map<String, String> streamUserProps = ImmutableMap.of("sKey1", "sValue1 sValue2", "Key1", "Value1");
store.setProperties(MetadataScope.USER, stream1, streamUserProps);
Map<String, String> datasetUserProps = ImmutableMap.of("sKey1", "sValuee1 sValuee2");
store.setProperties(MetadataScope.USER, dataset1, datasetUserProps);
// Test score and metadata match
MetadataSearchResponse response = search("ns1", "value1 multiword:av2");
Assert.assertEquals(2, response.getTotal());
List<MetadataSearchResultRecord> actual = Lists.newArrayList(response.getResults());
Map<MetadataScope, Metadata> expectedFlowMetadata = ImmutableMap.of(MetadataScope.USER, new Metadata(flowUserProps, flowUserTags), MetadataScope.SYSTEM, new Metadata(flowSysProps, flowSysTags));
Map<MetadataScope, Metadata> expectedStreamMetadata = ImmutableMap.of(MetadataScope.USER, new Metadata(streamUserProps, Collections.<String>emptySet()));
Map<MetadataScope, Metadata> expectedDatasetMetadata = ImmutableMap.of(MetadataScope.USER, new Metadata(datasetUserProps, Collections.<String>emptySet()));
List<MetadataSearchResultRecord> expected = Lists.newArrayList(new MetadataSearchResultRecord(flow1, expectedFlowMetadata), new MetadataSearchResultRecord(stream1, expectedStreamMetadata));
Assert.assertEquals(expected, actual);
response = search("ns1", "value1 sValue*");
Assert.assertEquals(3, response.getTotal());
actual = Lists.newArrayList(response.getResults());
expected = Lists.newArrayList(new MetadataSearchResultRecord(stream1, expectedStreamMetadata), new MetadataSearchResultRecord(dataset1, expectedDatasetMetadata), new MetadataSearchResultRecord(flow1, expectedFlowMetadata));
Assert.assertEquals(expected, actual);
response = search("ns1", "*");
Assert.assertEquals(3, response.getTotal());
actual = Lists.newArrayList(response.getResults());
Assert.assertTrue(actual.containsAll(expected));
}
Aggregations