blob: d5112e5312ee85ba2d26173ed09824631cafa421 [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.tuscany.sca.policy.matching;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
import org.apache.tuscany.sca.policy.matching.helloworld.HelloWorld;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/*
* Test the various conditions in the matching algorithm
* 1 - FAIL if there are intents that are mutually exclusive between reference and service
* 2 - PASS if there are no intents or policies present at reference and service
* 3 - FAIL if there are unresolved intents (intents with no policy set) at the reference (service should have been checked previously)
* 4 - PASS if there are no policies at reference and service (now we know all intents are resolved)
* 5 - FAIL if there are some policies on one side but not on the other
* 6 - PASS if the QName of the policy sets on each side match
* 7 - FAIL if the policy languages on both sides are different
* 8 - Perform policy specific match
*/
public class MatchingTestCase {
private static Node node;
@BeforeClass
public static void setUp() throws Exception {
try {
node = NodeFactory.newInstance().createNode(new Contribution("test", "target/classes"));
node.start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Test
public void testMutuallyExclusiveIntents() throws Exception {
HelloWorld helloWorld = node.getService(HelloWorld.class, "HelloWorldClientMutuallyExclusiveIntents");
try {
helloWorld.getGreetings("petra");
fail("Exception expected");
} catch (Exception ex) {
assertTrue(ex.getMessage().indexOf("No match because the following intents are mutually exclusive {http://tuscany.apache.org/xmlns/sca/1.1}testIntent3 {http://tuscany.apache.org/xmlns/sca/1.1}testIntent1") > -1);
}
}
@Test
public void testNoIntentsOrPolicies() throws Exception {
HelloWorld helloWorld = node.getService(HelloWorld.class, "HelloWorldClientNoIntentsOrPolicies");
assertEquals("Hello petra", helloWorld.getGreetings("petra"));
}
@Test
public void testUnresolvedIntentsOnReference() throws Exception {
HelloWorld helloWorld = node.getService(HelloWorld.class, "HelloUnresolvedIntentsOnReference");
try {
helloWorld.getGreetings("petra");
fail("Exception expected");
} catch (Exception ex) {
assertTrue(ex.getMessage().indexOf("No match because there are unresolved intents [{http://tuscany.apache.org/xmlns/sca/1.1}testIntent2]") > -1);
}
}
@Test
public void testIntentsButNoPolicies() throws Exception {
HelloWorld helloWorld = node.getService(HelloWorld.class, "HelloWorldClientIntentsButNoPolicies1");
assertEquals("Hello petra", helloWorld.getGreetings("petra"));
helloWorld = node.getService(HelloWorld.class, "HelloWorldClientIntentsButNoPolicies2");
assertEquals("Hello petra", helloWorld.getGreetings("petra"));
}
@Test
public void testSomePoliciesOnOneSideButNoneOnTheOther() throws Exception {
try {
HelloWorld helloWorld = node.getService(HelloWorld.class, "HelloWorldClientSomePoliciesOnOneSideButNoneOnTheOther");
helloWorld.getGreetings("petra");
fail("Exception expected");
} catch (Exception ex) {
assertTrue(ex.getMessage().indexOf("No match because there are policy sets at the endpoint but not at the endpoint reference") > -1);
}
}
@Test
public void testPolicySetQNameMatch() throws Exception {
HelloWorld helloWorld = node.getService(HelloWorld.class, "HelloWorldClientPolicySetQNameMatch");
assertEquals("Hello petra", helloWorld.getGreetings("petra"));
}
@Test
public void testDifferentPolicyLanguage() throws Exception {
try {
HelloWorld helloWorld = node.getService(HelloWorld.class, "HelloWorldClientDifferentPolicyLanguage");
helloWorld.getGreetings("petra");
fail("Exception expected");
} catch (Exception ex) {
assertTrue(ex.getMessage().indexOf("No match because the policy sets on either side have policies in differnt languages {http://schemas.xmlsoap.org/ws/2004/09/policy}Policy and {http://tuscany.apache.org/xmlns/sca/1.1}jdkLogger") > -1);
}
}
@Test
public void testPolicySpecificMatch() throws Exception {
// TODO
}
@AfterClass
public static void tearDown() throws Exception {
node.stop();
}
}