/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * 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 org.apache.atlas.catalog; import com.tinkerpop.blueprints.Vertex; import org.apache.atlas.catalog.definition.ResourceDefinition; import org.apache.atlas.repository.Constants; import org.testng.annotations.Test; import java.util.*; import static org.easymock.EasyMock.*; import static org.testng.Assert.*; /** * Unit tests for VertexWrapper. */ public class VertexWrapperTest { @Test public void testGetVertex() { Vertex v = createStrictMock(Vertex.class); ResourceDefinition resourceDefinition = createStrictMock(ResourceDefinition.class); // just return null for these because they aren't used in this test expect(resourceDefinition.getPropertyMapper()).andReturn(null); expect(resourceDefinition.getPropertyValueFormatters()).andReturn(null); expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn("testType"); replay(v, resourceDefinition); VertexWrapper vWrapper = new VertexWrapper(v, resourceDefinition); assertEquals(vWrapper.getVertex(), v); verify(v, resourceDefinition); } @SuppressWarnings("unchecked") @Test public void testGetProperty() { String testType = "testType"; String propName = "propName"; String qualifiedPropName = "Prefix.propName"; String propValue = "val"; String formattedValue = "value"; Vertex v = createStrictMock(Vertex.class); PropertyMapper propertyMapper = createStrictMock(PropertyMapper.class); PropertyValueFormatter formatter = createStrictMock(PropertyValueFormatter.class); // mock expectations expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn(testType); expect(propertyMapper.toFullyQualifiedName(propName, testType)).andReturn(qualifiedPropName); expect(v.getProperty(qualifiedPropName)).andReturn(propValue); expect(formatter.format(propValue)).andReturn((formattedValue)); replay(v, propertyMapper, formatter); VertexWrapper vWrapper = new VertexWrapper(v, propertyMapper, Collections.singletonMap(propName, formatter)); assertEquals(vWrapper.getProperty(propName), formattedValue); // now remove prop vWrapper.removeProperty(propName); assertNull(vWrapper.getProperty(propName)); verify(v, propertyMapper, formatter); } @SuppressWarnings("unchecked") @Test public void testGetProperty2() { String testType = "testType"; String propName = "propName"; String qualifiedPropName = "Prefix.propName"; String propValue = "val"; String formattedValue = "value"; Vertex v = createStrictMock(Vertex.class); ResourceDefinition resourceDefinition = createStrictMock(ResourceDefinition.class); PropertyMapper propertyMapper = createStrictMock(PropertyMapper.class); PropertyValueFormatter formatter = createStrictMock(PropertyValueFormatter.class); // mock expectations expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn(testType); expect(resourceDefinition.getPropertyMapper()).andReturn(propertyMapper); expect(resourceDefinition.getPropertyValueFormatters()).andReturn(Collections.singletonMap(propName, formatter)); expect(propertyMapper.toFullyQualifiedName(propName, testType)).andReturn(qualifiedPropName); expect(v.getProperty(qualifiedPropName)).andReturn(propValue); expect(formatter.format(propValue)).andReturn((formattedValue)); replay(v, resourceDefinition, propertyMapper, formatter); VertexWrapper vWrapper = new VertexWrapper(v, resourceDefinition); assertEquals(vWrapper.getProperty(propName), formattedValue); // now remove prop vWrapper.removeProperty(propName); assertNull(vWrapper.getProperty(propName)); verify(v, resourceDefinition, propertyMapper, formatter); } @Test public void testGetProperty_removed() { String testType = "testType"; String propName = "propName"; Vertex v = createStrictMock(Vertex.class); expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn(testType); // vertex shouldn't be asked for the removed property replay(v); VertexWrapper vWrapper = new VertexWrapper(v, null, Collections.<String, PropertyValueFormatter>emptyMap()); vWrapper.removeProperty(propName); assertNull(vWrapper.getProperty(propName)); verify(v); } @Test public void testGetPropertyKeys() { String testType = "testType"; // vertex returns unordered set Set<String> propertyKeys = new HashSet<>(); propertyKeys.add("foobar"); propertyKeys.add("Prefix.foo"); propertyKeys.add("Prefix.bar"); Vertex v = createStrictMock(Vertex.class); PropertyMapper propertyMapper = createMock(PropertyMapper.class); // mock expectations expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn(testType); expect(v.getPropertyKeys()).andReturn(propertyKeys); expect(propertyMapper.toCleanName("Prefix.bar", testType)).andReturn("bar"); expect(propertyMapper.toCleanName("Prefix.foo", testType)).andReturn("foo"); expect(propertyMapper.toCleanName("foobar", testType)).andReturn("foobar"); replay(v, propertyMapper); VertexWrapper vWrapper = new VertexWrapper(v, propertyMapper, Collections.<String, PropertyValueFormatter>emptyMap()); Collection<String> resultKeys = vWrapper.getPropertyKeys(); Iterator<String> propIterator = resultKeys.iterator(); assertEquals(resultKeys.size(), 3); // natural ordering is applied in vertex wrapper assertEquals(propIterator.next(), "bar"); assertEquals(propIterator.next(), "foo"); assertEquals(propIterator.next(), "foobar"); verify(v, propertyMapper); } @Test public void testGetPropertyKeys_removed() { String testType = "testType"; Set<String> propertyKeys = new TreeSet<>(); propertyKeys.add("Prefix.foo"); propertyKeys.add("Prefix.bar"); propertyKeys.add("foobar"); Vertex v = createStrictMock(Vertex.class); PropertyMapper propertyMapper = createStrictMock(PropertyMapper.class); // mock expectations expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn(testType); expect(v.getPropertyKeys()).andReturn(propertyKeys); // natural ordering provided by TreeSet expect(propertyMapper.toCleanName("Prefix.bar", testType)).andReturn("bar"); expect(propertyMapper.toCleanName("Prefix.foo", testType)).andReturn("foo"); expect(propertyMapper.toCleanName("foobar", testType)).andReturn("foobar"); replay(v, propertyMapper); VertexWrapper vWrapper = new VertexWrapper(v, propertyMapper, Collections.<String, PropertyValueFormatter>emptyMap()); // remove props vWrapper.removeProperty("foo"); vWrapper.removeProperty("foobar"); Collection<String> resultKeys = vWrapper.getPropertyKeys(); assertEquals(resultKeys.size(), 1); assertTrue(resultKeys.contains("bar")); verify(v, propertyMapper); } @Test public void testGetPropertyMap() { String testType = "testType"; Set<String> propertyKeys = new HashSet<>(); propertyKeys.add("Prefix.foo"); propertyKeys.add("Prefix.bar"); propertyKeys.add("foobar"); Vertex v = createMock(Vertex.class); PropertyMapper propertyMapper = createMock(PropertyMapper.class); PropertyValueFormatter formatter = createMock(PropertyValueFormatter.class); Map<String, PropertyValueFormatter> valueFormatters = new HashMap<>(); valueFormatters.put("foo", formatter); valueFormatters.put("bar", formatter); // mock expectations expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn(testType); expect(v.getPropertyKeys()).andReturn(propertyKeys); expect(v.getProperty("Prefix.foo")).andReturn("Prefix.foo:Value"); expect(v.getProperty("Prefix.bar")).andReturn("Prefix.bar:Value"); expect(v.getProperty("foobar")).andReturn("foobarValue"); expect(propertyMapper.toCleanName("Prefix.bar", testType)).andReturn("bar"); expect(propertyMapper.toCleanName("Prefix.foo", testType)).andReturn("foo"); expect(propertyMapper.toCleanName("foobar", testType)).andReturn("foobar"); expect(formatter.format("Prefix.foo:Value")).andReturn("fooValue"); expect(formatter.format("Prefix.bar:Value")).andReturn("barValue"); replay(v, propertyMapper, formatter); VertexWrapper vWrapper = new VertexWrapper(v, propertyMapper, valueFormatters); Map<String, Object> resultMap = vWrapper.getPropertyMap(); assertEquals(resultMap.size(), 3); Iterator<Map.Entry<String, Object>> iter = resultMap.entrySet().iterator(); Map.Entry<String, Object> entry1 = iter.next(); assertEquals(entry1.getKey(), "bar"); assertEquals(entry1.getValue(), "barValue"); Map.Entry<String, Object> entry2 = iter.next(); assertEquals(entry2.getKey(), "foo"); assertEquals(entry2.getValue(), "fooValue"); Map.Entry<String, Object> entry3 = iter.next(); assertEquals(entry3.getKey(), "foobar"); assertEquals(entry3.getValue(), "foobarValue"); verify(v, propertyMapper, formatter); } @Test public void testGetPropertyMap_removed() { String testType = "testType"; Set<String> propertyKeys = new HashSet<>(); propertyKeys.add("Prefix.foo"); propertyKeys.add("Prefix.bar"); propertyKeys.add("foobar"); Vertex v = createMock(Vertex.class); PropertyMapper propertyMapper = createMock(PropertyMapper.class); PropertyValueFormatter formatter = createMock(PropertyValueFormatter.class); Map<String, PropertyValueFormatter> valueFormatters = new HashMap<>(); valueFormatters.put("foo", formatter); valueFormatters.put("bar", formatter); // mock expectations expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn(testType); expect(v.getPropertyKeys()).andReturn(propertyKeys); expect(v.getProperty("Prefix.bar")).andReturn("Prefix.bar:Value"); expect(v.getProperty("foobar")).andReturn("foobarValue"); expect(propertyMapper.toCleanName("Prefix.bar", testType)).andReturn("bar"); expect(propertyMapper.toCleanName("Prefix.foo", testType)).andReturn("foo"); expect(propertyMapper.toCleanName("foobar", testType)).andReturn("foobar"); expect(formatter.format("Prefix.bar:Value")).andReturn("barValue"); replay(v, propertyMapper, formatter); VertexWrapper vWrapper = new VertexWrapper(v, propertyMapper, valueFormatters); //remove "foo" property vWrapper.removeProperty("foo"); Map<String, Object> resultMap = vWrapper.getPropertyMap(); assertEquals(resultMap.size(), 2); Iterator<Map.Entry<String, Object>> iter = resultMap.entrySet().iterator(); Map.Entry<String, Object> entry1 = iter.next(); assertEquals(entry1.getKey(), "bar"); assertEquals(entry1.getValue(), "barValue"); Map.Entry<String, Object> entry2 = iter.next(); assertEquals(entry2.getKey(), "foobar"); assertEquals(entry2.getValue(), "foobarValue"); verify(v, propertyMapper, formatter); } @Test public void testIsPropertyRemoved() { String testType = "testType"; Vertex v = createMock(Vertex.class); expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn(testType); replay(v); VertexWrapper vWrapper = new VertexWrapper(v, null, Collections.<String, PropertyValueFormatter>emptyMap()); vWrapper.removeProperty("foo"); assertTrue(vWrapper.isPropertyRemoved("foo")); assertFalse(vWrapper.isPropertyRemoved("bar")); } @Test public void testSetProperty() { String testType = "testType"; String cleanPropName = "prop1"; String qualifiedPropName = "test.prop1"; String propValue = "newValue"; Vertex v = createStrictMock(Vertex.class); PropertyMapper propertyMapper = createStrictMock(PropertyMapper.class); expect(v.<String>getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY)).andReturn(testType); expect(propertyMapper.toFullyQualifiedName(cleanPropName, testType)).andReturn(qualifiedPropName); v.setProperty(qualifiedPropName, propValue); replay(v, propertyMapper); VertexWrapper vWrapper = new VertexWrapper( v, propertyMapper, Collections.<String, PropertyValueFormatter>emptyMap()); vWrapper.setProperty(cleanPropName, propValue); verify(v, propertyMapper); } }