/* * 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.collections; import java.util.Arrays; import java.util.Collections; import java.util.Map; import org.apache.ambari.server.collections.functors.AndPredicate; import org.apache.ambari.server.collections.functors.ContainsPredicate; import org.apache.ambari.server.collections.functors.ContextTransformer; import org.apache.ambari.server.collections.functors.EqualsPredicate; import org.apache.ambari.server.collections.functors.NotPredicate; import org.apache.ambari.server.collections.functors.OrPredicate; import org.junit.Test; import junit.framework.Assert; public class PredicateUtilsTest { @Test public void toMap() throws Exception { // Test null predicate safely returns null Assert.assertNull(PredicateUtils.toMap(null)); Assert.assertEquals(createMap(), PredicateUtils.toMap(createPredicate())); } @Test public void fromMap() throws Exception { verifyPredicate(PredicateUtils.fromMap(createMap())); } @Test public void toJSON() throws Exception { // Test null predicate safely returns null Assert.assertNull(PredicateUtils.toJSON(null)); Assert.assertEquals(createJSON(), PredicateUtils.toJSON(createPredicate())); } @Test public void fromJSON() throws Exception { verifyPredicate(PredicateUtils.fromJSON(createJSON())); } private Predicate createPredicate() { ContextTransformer transformer1 = new ContextTransformer("services"); ContextTransformer transformer2 = new ContextTransformer("configurations/service-env/property1"); ContextTransformer transformer3 = new ContextTransformer("configurations/cluster-env/property1"); ContainsPredicate predicate1 = new ContainsPredicate(transformer1, "HDFS"); EqualsPredicate predicate2 = new EqualsPredicate(transformer2, "true"); EqualsPredicate predicate3 = new EqualsPredicate(transformer3, "false"); AndPredicate andPredicate = new AndPredicate(predicate1, predicate2); OrPredicate orPredicate = new OrPredicate(predicate3, andPredicate); return new NotPredicate(orPredicate); } private Map<String, Object> createMap() { Map<String, Object> andMap = Collections.<String, Object>singletonMap( AndPredicate.NAME, Arrays.asList( Collections.<String, Object>singletonMap(ContainsPredicate.NAME, Arrays.asList("services", "HDFS")), Collections.<String, Object>singletonMap(EqualsPredicate.NAME, Arrays.asList("configurations/service-env/property1", "true")) ) ); Map<String, Object> orMap = Collections.<String, Object>singletonMap(OrPredicate.NAME, Arrays.asList( Collections.<String, Object>singletonMap(EqualsPredicate.NAME, Arrays.asList("configurations/cluster-env/property1", "false")), andMap ) ); return Collections.<String, Object>singletonMap(NotPredicate.NAME, orMap); } private String createJSON() { String andJSON = "{\"and\":[{\"contains\":[\"services\",\"HDFS\"]},{\"equals\":[\"configurations/service-env/property1\",\"true\"]}]}"; String orJSON = "{\"or\":[{\"equals\":[\"configurations/cluster-env/property1\",\"false\"]}," + andJSON + "]}"; return "{\"not\":" + orJSON + "}"; } private void verifyPredicate(Predicate predicate) { Assert.assertNotNull(predicate); Assert.assertEquals(NotPredicate.NAME, predicate.getName()); Assert.assertTrue(predicate instanceof NotPredicate); org.apache.commons.collections.Predicate[] predicates; predicates = ((NotPredicate) predicate).getPredicates(); Assert.assertEquals(1, predicates.length); Assert.assertNotNull(predicates[0]); Assert.assertTrue(predicates[0] instanceof OrPredicate); Assert.assertEquals(OrPredicate.NAME, ((OrPredicate) predicates[0]).getName()); predicates = ((OrPredicate) predicates[0]).getPredicates(); Assert.assertEquals(2, predicates.length); Assert.assertNotNull(predicates[0]); Assert.assertTrue(predicates[0] instanceof EqualsPredicate); Assert.assertEquals(EqualsPredicate.NAME, ((EqualsPredicate) predicates[0]).getName()); Assert.assertEquals("configurations/cluster-env/property1", ((EqualsPredicate) predicates[0]).getContextKey()); Assert.assertEquals("false", ((EqualsPredicate) predicates[0]).getValue()); Assert.assertNotNull(predicates[1]); Assert.assertTrue(predicates[1] instanceof AndPredicate); Assert.assertEquals(AndPredicate.NAME, ((AndPredicate) predicates[1]).getName()); predicates = ((AndPredicate) predicates[1]).getPredicates(); Assert.assertEquals(2, predicates.length); Assert.assertNotNull(predicates[0]); Assert.assertTrue(predicates[0] instanceof ContainsPredicate); Assert.assertEquals(ContainsPredicate.NAME, ((ContainsPredicate) predicates[0]).getName()); Assert.assertEquals("services", ((ContainsPredicate) predicates[0]).getContextKey()); Assert.assertEquals("HDFS", ((ContainsPredicate) predicates[0]).getValue()); Assert.assertNotNull(predicates[1]); Assert.assertTrue(predicates[1] instanceof EqualsPredicate); Assert.assertEquals(EqualsPredicate.NAME, ((EqualsPredicate) predicates[1]).getName()); Assert.assertEquals("configurations/service-env/property1", ((EqualsPredicate) predicates[1]).getContextKey()); Assert.assertEquals("true", ((EqualsPredicate) predicates[1]).getValue()); } }