/** * Copyright 2016 Hortonworks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. **/ package com.hortonworks.registries.tag.service; import com.google.common.collect.ImmutableList; import com.hortonworks.registries.common.test.IntegrationTest; import com.hortonworks.registries.tag.Tag; import com.hortonworks.registries.tag.TaggedEntity; import com.hortonworks.registries.tag.client.TagClient; import io.dropwizard.testing.ResourceHelpers; import io.dropwizard.testing.junit.DropwizardAppRule; import org.junit.Assert; import org.junit.ClassRule; import org.junit.Test; import org.junit.experimental.categories.Category; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @Category(IntegrationTest.class) public class TagRestServiceTest { @ClassRule public static final DropwizardAppRule<TestConfiguration> RULE = new DropwizardAppRule<>(TestApplication.class, ResourceHelpers.resourceFilePath("tag-test.yaml")); private String catalogRootUrl = String.format("http://localhost:%d/api/v1/catalog", RULE.getLocalPort()); @Test public void testTagResource() throws Exception { TagClient tagClient = new TagClient(catalogRootUrl); long parentTagId = 10L; long childTagId = 11L; //create a "parent-tag" Tag parent = createTag(parentTagId, "parent-tag"); Assert.assertTrue(tagClient.addTag(parent).getId() == parentTagId); //create a "child-tag" which is tagged under "parent-tag" Tag child = createTag(childTagId, "child-tag", ImmutableList.<Tag>of(parent)); Assert.assertTrue(tagClient.addTag(child).getId() == childTagId); //update parent-tag parent = createTag(parentTagId, "parent-update-tag"); Assert.assertTrue(tagClient.addOrUpdateTag(parent).getId() == parentTagId); //get a Tag by Id Tag tag= tagClient.getTag(parentTagId); Assert.assertTrue("Tag Id is different" , tag.getId() == parentTagId); long unknownTagId = 100L; //get an unknown tag by Id try { tag = tagClient.getTag(unknownTagId); Assert.fail("This should have thrown an error as entity" + unknownTagId + " does not exist"); } catch (Exception e) { } //add another tag Tag testTag = createTag(12L, "to-delete-tag"); Assert.assertTrue(tagClient.addTag(testTag).getId() == 12L); //list all tags List<Tag> allTags = tagClient.listTags(); Assert.assertTrue("tag count mismatch", allTags.size() == 3); //list tags with queryParams Map<String, Object> queryParams = new HashMap<>(); queryParams.put("name", "child-tag"); queryParams.put("description", "child-tag"); allTags = tagClient.listTags(queryParams); Assert.assertTrue("tag count mismatch", allTags.size() == 1); //delete a tag tagClient.removeTag(12L); allTags = tagClient.listTags(); Assert.assertTrue("count mismatch", allTags.size() == 2); //add Tag for Entity tagClient.addTagForEntity(new TaggedEntity("Device", 1L), parentTagId); tagClient.addTagForEntity(new TaggedEntity("Device", 2L), parentTagId); tagClient.addTagForEntity(new TaggedEntity("Device", 3L), parentTagId); //get All Entities For Tag List<TaggedEntity> allEntities = tagClient.getTaggedEntities(parentTagId); Assert.assertTrue("entity count mismatch", allEntities.size() == 3); //remove Tag for Entity tagClient.removeTagForEntity(new TaggedEntity("Device", 1L), parentTagId); allEntities = tagClient.getTaggedEntities(parentTagId); Assert.assertTrue("entity count mismatch", allEntities.size() == 2); //add new Tag to existing entity Tag newTag = createTag(13L, "new-tag"); Assert.assertTrue(tagClient.addTag(newTag).getId() == 13L); tagClient.addTagForEntity(new TaggedEntity("Device", 2L), 13L); //get All Tags For a given Entity allTags = tagClient.getTags(new TaggedEntity("Device", 2L)); Assert.assertTrue("tag count mismatch", allTags.size() == 2); //try adding unknown tag for a Entity try { tagClient.addTagForEntity(new TaggedEntity("Device", 1L), unknownTagId); Assert.fail("should have thrown error"); } catch (RuntimeException e) { } //try removing unknown tag for a Entity try { tagClient.removeTagForEntity(new TaggedEntity("Device", 1L), unknownTagId); Assert.fail("should have thrown error"); } catch (RuntimeException e) { } } private Tag createTag(Long id, String name) { return createTag(id, name, Collections.<Tag>emptyList()); } private Tag createTag(Long id, String name, List<Tag> parentTags) { Tag newTag = new Tag(); newTag.setId(id); newTag.setName(name); newTag.setDescription(name); newTag.setTags(parentTags); return newTag; } }