blob: 8abeb03c0a89697c1ab60a3170d4d63f2634bf75 [file] [log] [blame]
/**
* 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
*
* 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 org.apache.ambari.server.state;
import com.google.common.collect.Sets;
import org.junit.Test;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;
import java.io.ByteArrayInputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class PropertyInfoTest {
@Test
public void testProperty() {
PropertyInfo property = new PropertyInfo();
property.setName("name");
property.setValue("value");
property.setDescription("desc");
property.setFilename("filename");
PropertyDependencyInfo pdi = new PropertyDependencyInfo("type", "name");
property.getDependsOnProperties().add(pdi);
assertEquals("name", property.getName());
assertEquals("value", property.getValue());
assertEquals("desc", property.getDescription());
assertEquals("filename", property.getFilename());
assertEquals(1, property.getDependsOnProperties().size());
assertTrue(property.getDependsOnProperties().contains(pdi));
}
@Test
public void testAttributes() throws Exception {
PropertyInfo property = new PropertyInfo();
List<Element> elements = new ArrayList<Element>();
Element e1 = createNiceMock(Element.class);
Element e2 = createNiceMock(Element.class);
Node n1 = createNiceMock(Node.class);
Node n2 = createNiceMock(Node.class);
elements.add(e1);
elements.add(e2);
// set mock expectations
expect(e1.getTagName()).andReturn("foo").anyTimes();
expect(e1.getFirstChild()).andReturn(n1).anyTimes();
expect(n1.getNodeValue()).andReturn("value1").anyTimes();
expect(e2.getTagName()).andReturn("bar").anyTimes();
expect(e2.getFirstChild()).andReturn(n2).anyTimes();
expect(n2.getNodeValue()).andReturn("value2").anyTimes();
replay(e1, e2, n1, n2);
// set attributes
Field f = property.getClass().getDeclaredField("propertyAttributes");
f.setAccessible(true);
f.set(property, elements);
Map<String, String> attributes = property.getAttributesMap();
assertEquals(2, attributes.size());
assertEquals("value1", attributes.get("foo"));
assertEquals("value2", attributes.get("bar"));
}
@Test
public void testUpgradeBehaviorTag() throws JAXBException {
// given
String xml =
"<property>\n" +
" <name>prop_name</name>\n" +
" <value>prop_val</value>\n" +
" <on-ambari-upgrade add=\"true\" update=\"true\" delete=\"true\"/>\n" +
"</property>";
// when
PropertyInfo propertyInfo = propertyInfoFrom(xml);
// then
assertTrue(propertyInfo.getPropertyAmbariUpgradeBehavior().isAdd());
assertTrue(propertyInfo.getPropertyAmbariUpgradeBehavior().isUpdate());
assertTrue(propertyInfo.getPropertyAmbariUpgradeBehavior().isDelete());
}
@Test
public void testBehaviorWithoutUpgradeTags() throws JAXBException {
// given
String xml =
"<property>\n" +
" <name>prop_name</name>\n" +
" <value>prop_val</value>\n" +
"</property>";
// when
PropertyInfo propertyInfo = propertyInfoFrom(xml);
// then
assertTrue(propertyInfo.getPropertyAmbariUpgradeBehavior().isAdd());
assertFalse(propertyInfo.getPropertyAmbariUpgradeBehavior().isUpdate());
assertFalse(propertyInfo.getPropertyAmbariUpgradeBehavior().isDelete());
}
@Test
public void testUnknownPropertyType() throws Exception {
// Given
String xml =
"<property>\n"+
" <name>prop_name</name>\n" +
" <value>prop_val</value>\n" +
" <property-type>PASSWORD USER UNRECOGNIZED_TYPE</property-type>\n" +
" <description>test description</description>\n" +
"</property>";
// When
PropertyInfo propertyInfo = propertyInfoFrom(xml);
// Then
Set<PropertyInfo.PropertyType> expectedPropertyTypes = Sets.newHashSet(PropertyInfo.PropertyType.PASSWORD, PropertyInfo.PropertyType.USER);
assertEquals(expectedPropertyTypes, propertyInfo.getPropertyTypes());
}
public static PropertyInfo propertyInfoFrom(String xml) throws JAXBException {
JAXBContext jaxbCtx = JAXBContext.newInstance(PropertyInfo.class, PropertyUpgradeBehavior.class);
Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
return unmarshaller.unmarshal(
new StreamSource(
new ByteArrayInputStream(xml.getBytes())
),
PropertyInfo.class
).getValue();
}
}