/* * Copyright © 2016 Cask Data, Inc. * * 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 co.cask.cdap.etl.proto; import co.cask.cdap.api.artifact.ArtifactId; import co.cask.cdap.api.artifact.ArtifactScope; import co.cask.cdap.api.artifact.ArtifactVersion; import co.cask.cdap.api.plugin.PluginClass; import co.cask.cdap.api.plugin.PluginPropertyField; import com.google.common.collect.ImmutableMap; import org.junit.Assert; import org.junit.Test; import java.util.SortedMap; import java.util.TreeMap; /** */ public class ArtifactSelectorTest { @Test public void testSelection() { SortedMap<ArtifactId, PluginClass> plugins = new TreeMap<>(); // doesn't matter what this is, since we only select on artifact id. PluginClass pluginClass = new PluginClass("type", "name", "desc", "com.company.class", "field", ImmutableMap.<String, PluginPropertyField>of()); // put every combination of abc or def as name, 1.0.0 or 2.0.0 as version, and system or user as scope plugins.put(new ArtifactId("abc", new ArtifactVersion("1.0.0"), ArtifactScope.SYSTEM), pluginClass); plugins.put(new ArtifactId("abc", new ArtifactVersion("2.0.0"), ArtifactScope.SYSTEM), pluginClass); plugins.put(new ArtifactId("abc", new ArtifactVersion("1.0.0"), ArtifactScope.USER), pluginClass); plugins.put(new ArtifactId("abc", new ArtifactVersion("2.0.0"), ArtifactScope.USER), pluginClass); plugins.put(new ArtifactId("def", new ArtifactVersion("1.0.0"), ArtifactScope.SYSTEM), pluginClass); plugins.put(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.SYSTEM), pluginClass); plugins.put(new ArtifactId("def", new ArtifactVersion("1.0.0"), ArtifactScope.USER), pluginClass); plugins.put(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.USER), pluginClass); // test scope only ArtifactSelector selector = new ArtifactSelector("type", "name", ArtifactScope.SYSTEM, null, null); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.SYSTEM), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", ArtifactScope.USER, null, null); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); // test name only selector = new ArtifactSelector("type", "name", null, "abc", null); Assert.assertEquals(new ArtifactId("abc", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", null, "def", null); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); try { selector = new ArtifactSelector("type", "name", null, "xyz", null); selector.select(plugins); } catch (Exception e) { // expected } // test version only selector = new ArtifactSelector("type", "name", null, null, new ArtifactVersion("1.0.0")); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("1.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", null, null, new ArtifactVersion("2.0.0")); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); try { selector = new ArtifactSelector("type", "name", null, null, new ArtifactVersion("3.0.0")); selector.select(plugins); } catch (Exception e) { // expected } // test name + version selector = new ArtifactSelector("type", "name", null, "abc", new ArtifactVersion("1.0.0")); Assert.assertEquals(new ArtifactId("abc", new ArtifactVersion("1.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", null, "abc", new ArtifactVersion("2.0.0")); Assert.assertEquals(new ArtifactId("abc", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", null, "def", new ArtifactVersion("1.0.0")); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("1.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", null, "def", new ArtifactVersion("2.0.0")); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); try { selector = new ArtifactSelector("type", "name", null, "xyz", new ArtifactVersion("1.0.0")); selector.select(plugins); } catch (Exception e) { // expected } try { selector = new ArtifactSelector("type", "name", null, "abc", new ArtifactVersion("3.0.0")); selector.select(plugins); } catch (Exception e) { // expected } // test name + scope selector = new ArtifactSelector("type", "name", ArtifactScope.SYSTEM, "abc", null); Assert.assertEquals(new ArtifactId("abc", new ArtifactVersion("2.0.0"), ArtifactScope.SYSTEM), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", ArtifactScope.SYSTEM, "def", null); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.SYSTEM), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", ArtifactScope.USER, "abc", null); Assert.assertEquals(new ArtifactId("abc", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", ArtifactScope.USER, "def", null); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); try { selector = new ArtifactSelector("type", "name", ArtifactScope.SYSTEM, "xyz", null); selector.select(plugins); } catch (Exception e) { // expected } // test version + scope selector = new ArtifactSelector("type", "name", ArtifactScope.SYSTEM, null, new ArtifactVersion("1.0.0")); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("1.0.0"), ArtifactScope.SYSTEM), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", ArtifactScope.SYSTEM, null, new ArtifactVersion("2.0.0")); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.SYSTEM), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", ArtifactScope.USER, null, new ArtifactVersion("1.0.0")); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("1.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); selector = new ArtifactSelector("type", "name", ArtifactScope.USER, null, new ArtifactVersion("2.0.0")); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); try { selector = new ArtifactSelector("type", "name", ArtifactScope.SYSTEM, "xyz", null); selector.select(plugins); } catch (Exception e) { // expected } // test name + version + scope selector = new ArtifactSelector("type", "name", ArtifactScope.USER, "def", new ArtifactVersion("2.0.0")); Assert.assertEquals(new ArtifactId("def", new ArtifactVersion("2.0.0"), ArtifactScope.USER), selector.select(plugins).getKey()); try { selector = new ArtifactSelector("type", "name", ArtifactScope.USER, "xyz", new ArtifactVersion("2.0.0")); selector.select(plugins); } catch (Exception e) { // expected } } }