/*
*
* * Copyright 2016 Axibase Corporation or its affiliates. All Rights Reserved.
* *
* * Licensed under the Apache License, Version 2.0 (the "License").
* * You may not use this file except in compliance with the License.
* * A copy of the License is located at
* *
* * https://www.axibase.com/atsd/axibase-apache-2.0.pdf
* *
* * or in the "license" file accompanying this file. This file 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.axibase.tsd.client.metadata;
import com.axibase.tsd.RerunRule;
import com.axibase.tsd.client.DataService;
import com.axibase.tsd.client.HttpClientManager;
import com.axibase.tsd.client.MetaDataService;
import com.axibase.tsd.model.meta.Entity;
import com.axibase.tsd.model.meta.EntityGroup;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import static com.axibase.tsd.TestUtil.*;
import static junit.framework.Assert.*;
/**
* @author Dmitry Korchagin.
*/
public class EntityGroupTest {
private MetaDataService metaDataService;
private HttpClientManager httpClientManager;
@Rule
public RerunRule rerunRule = new RerunRule();
@Before
public void setUp() throws Exception {
httpClientManager = buildHttpClientManager();
metaDataService = new MetaDataService();
metaDataService.setHttpClientManager(httpClientManager);
DataService dataService = new DataService();
dataService.setHttpClientManager(httpClientManager);
waitWorkingServer(httpClientManager);
}
@After
public void tearDown() {
httpClientManager.close();
}
@Test
public void testRetrieveAllEntityGroups() throws Exception {
final String entityGroupName = buildVariablePrefix();
if (metaDataService.retrieveEntityGroup(entityGroupName) == null) {
assertTrue(metaDataService.createOrReplaceEntityGroup(new EntityGroup(entityGroupName)));
}
List<EntityGroup> entityGroups = metaDataService.retrieveEntityGroups();
assertTrue(entityGroups.size() > 0);
assertTrue(entityGroups.get(0) instanceof EntityGroup);
boolean containsTestEntityGroup = false;
for (Iterator<EntityGroup> iterator = entityGroups.iterator(); iterator.hasNext() && !containsTestEntityGroup; ) {
EntityGroup entityGroup = iterator.next();
containsTestEntityGroup = entityGroupName.equals(entityGroup.getName());
}
assertTrue(containsTestEntityGroup);
}
@Test
public void testRetrieveEntityGroupByName() throws Exception {
final String entityGroupName = buildVariablePrefix();
if (metaDataService.retrieveEntityGroup(entityGroupName) == null) {
assertTrue(metaDataService.createOrReplaceEntityGroup(new EntityGroup(entityGroupName)));
}
EntityGroup entityGroup = metaDataService.retrieveEntityGroup(entityGroupName);
assertNotNull(entityGroup);
assertEquals(entityGroup.getName(), entityGroupName);
}
@Test
public void testCreateOrReplaceEntityGroupWithTags() throws Exception {
final String entityGroupName = buildVariablePrefix();
if (metaDataService.retrieveEntityGroup(entityGroupName) != null) {
metaDataService.deleteEntityGroup(new EntityGroup(entityGroupName));
}
assertNull(metaDataService.retrieveEntityGroup(entityGroupName));
EntityGroup entityGroup = new EntityGroup(entityGroupName);
{
Map<String, String> tags = new HashMap<>();
tags.put("test-tag1", "test-tag1-val");
tags.put("test-tag2", "test-tag2-val1");
entityGroup.setTags(tags);
assertTrue(metaDataService.createOrReplaceEntityGroup(entityGroup));
entityGroup = metaDataService.retrieveEntityGroup(entityGroupName);
assertEquals(entityGroup.getName(), entityGroupName);
assertEquals(entityGroup.getTags(), tags);
}
{
Map<String, String> tags = new HashMap<>();
tags.put("test-tag2", "test-tag2-val2");
tags.put("test-tag3", "test-tag3-val");
entityGroup.setTags(tags);
assertTrue(metaDataService.createOrReplaceEntityGroup(entityGroup));
entityGroup = metaDataService.retrieveEntityGroup(entityGroupName);
assertEquals(entityGroup.getName(), entityGroupName);
assertEquals(entityGroup.getTags(), tags);
}
}
@Test
public void testCreateAndDeleteEntityGroupWithoutTags() throws Exception {
final String entityGroupName = buildVariablePrefix();
if (metaDataService.retrieveEntityGroup(entityGroupName) != null) {
assertTrue(metaDataService.deleteEntityGroup(new EntityGroup(entityGroupName)));
}
assertNull(metaDataService.retrieveEntityGroup(entityGroupName));
assertTrue(metaDataService.createOrReplaceEntityGroup(new EntityGroup(entityGroupName)));
EntityGroup entityGroup = metaDataService.retrieveEntityGroup(entityGroupName);
assertNotNull(entityGroup);
assertEquals(entityGroup.getName(), entityGroupName);
assertTrue(metaDataService.deleteEntityGroup(entityGroup));
assertNull(metaDataService.retrieveEntityGroup(entityGroupName));
}
@Test
public void testUpdateEntityGroup() throws Exception {
final String entityGroupName = buildVariablePrefix();
if (metaDataService.retrieveMetric(entityGroupName) != null) {
assertTrue(metaDataService.deleteMetric(createNewTestMetric(entityGroupName)));
}
assertNull(metaDataService.retrieveMetric(entityGroupName));
EntityGroup entityGroup = new EntityGroup(entityGroupName);
{
Map<String, String> defaultTags = new HashMap<>();
defaultTags.put("test-tag1", "test-tag1-val");
defaultTags.put("test-tag2", "test-tag2-val");
entityGroup.setTags(defaultTags);
assertTrue(metaDataService.createOrReplaceEntityGroup(entityGroup));
entityGroup = metaDataService.retrieveEntityGroup(entityGroupName);
assertNotNull(entityGroup);
assertEquals(entityGroup.getName(), entityGroupName);
assertEquals(entityGroup.getTags(), defaultTags);
assertEquals(entityGroup.getTags().get("test-tag2"), "test-tag2-val");
}
{
Map<String, String> newTags = new HashMap<>();
newTags.put("test-tag2", "test-tag2-new-val");
newTags.put("test-tag3", "test-tag3-val");
newTags.put("test-tag4", "test-tag4-val");
entityGroup.setTags(newTags);
assertTrue(metaDataService.updateEntityGroup(entityGroup));
entityGroup = metaDataService.retrieveEntityGroup(entityGroupName);
assertNotNull(entityGroup);
assertTrue(entityGroup.getTags().containsKey("test-tag1"));
assertTrue(entityGroup.getTags().containsKey("test-tag2"));
assertTrue(entityGroup.getTags().containsKey("test-tag3"));
assertTrue(entityGroup.getTags().containsKey("test-tag4"));
assertEquals(entityGroup.getTags().get("test-tag2"), "test-tag2-new-val");
}
}
@Test
public void testRetrieveGroupEntitiesByGroupName() throws Exception {
final String entityGroupName = buildVariablePrefix() + "group";
final String entityNameFrist = buildVariablePrefix() + "first";
final String entityNameSeconds = buildVariablePrefix() + "second";
List<Entity> entities = metaDataService.retrieveGroupEntities(entityGroupName);
if (entities.size() < 2) {
EntityGroup entityGroup = new EntityGroup(entityGroupName);
assertTrue(metaDataService.createOrReplaceEntityGroup(entityGroup));
assertTrue(metaDataService.addGroupEntities(entityGroupName, true, new Entity(entityNameFrist), new Entity(entityNameSeconds)));
}
entities = metaDataService.retrieveGroupEntities(entityGroupName);
assertEquals(2, entities.size());
assertTrue(entities.get(0) instanceof Entity);
assertTrue((entityNameFrist.concat(entityNameSeconds)).contains(entities.get(0).getName()));
assertTrue((entityNameFrist.concat(entityNameSeconds)).contains(entities.get(1).getName()));
}
@Test
public void testManageGroupEntities() throws Exception {
final String entityGroupName = buildVariablePrefix() + "group";
if (metaDataService.retrieveEntityGroup(entityGroupName) == null) {
assertTrue(metaDataService.createOrReplaceEntityGroup(new EntityGroup(entityGroupName)));
}
assertNotNull(metaDataService.retrieveEntityGroup(entityGroupName));
if (!metaDataService.retrieveGroupEntities(entityGroupName).isEmpty()) {
assertTrue(metaDataService.deleteAllGroupEntities(entityGroupName));
}
assertTrue(metaDataService.retrieveGroupEntities(entityGroupName).isEmpty());
{
final String oldEntityName = buildVariablePrefix() + "old-entity";
assertTrue(metaDataService.addGroupEntities(entityGroupName, true, new Entity(oldEntityName)));
List entity = metaDataService.retrieveGroupEntities(entityGroupName);
assertEquals(1, entity.size());
assertTrue(entity.get(0) instanceof Entity);
assertEquals(oldEntityName, ((Entity) entity.get(0)).getName());
}
final String newEntityNameFirst = buildVariablePrefix() + "new-entity-first";
final String newEntityNameSecond = buildVariablePrefix() + "new-entity-second";
{
assertTrue(metaDataService.replaceGroupEntities(entityGroupName, true, new Entity(newEntityNameFirst), new Entity(newEntityNameSecond)));
List entity = metaDataService.retrieveGroupEntities(entityGroupName);
assertEquals(2, entity.size());
assertTrue(entity.get(0) instanceof Entity);
assertTrue(newEntityNameFirst.concat(newEntityNameSecond).contains(((Entity) entity.get(0)).getName()));
assertTrue(newEntityNameFirst.concat(newEntityNameSecond).contains(((Entity) entity.get(1)).getName()));
}
{
assertTrue(metaDataService.deleteGroupEntities(entityGroupName, new Entity(newEntityNameFirst)));
List entity = metaDataService.retrieveGroupEntities(entityGroupName);
assertEquals(1, entity.size());
assertTrue(entity.get(0) instanceof Entity);
assertEquals(newEntityNameSecond, ((Entity) entity.get(0)).getName());
}
{
assertTrue(metaDataService.deleteAllGroupEntities(entityGroupName));
List entity = metaDataService.retrieveGroupEntities(entityGroupName);
assertTrue(entity.isEmpty());
}
}
}