summaryrefslogtreecommitdiffstats
path: root/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca')
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/GuardianImplementationTest.java77
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/LCATestCase.java115
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/ApplyUpdateFailureException.java22
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/BackupFailedException.java24
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/BackupJoinedException.java24
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/Node.java37
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/NodeImpl.java282
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryBackupFailedTogetherException.java26
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryExistsException.java24
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryFailedException.java24
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryServiceFailureException.java24
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/TestInterface.java26
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/concurrentExceptions/Launch.java69
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/simple/Launch.java55
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/simple/Launch2.java54
15 files changed, 883 insertions, 0 deletions
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/GuardianImplementationTest.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/GuardianImplementationTest.java
new file mode 100644
index 0000000000..ba4f6230d8
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/GuardianImplementationTest.java
@@ -0,0 +1,77 @@
+/*
+ * 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.implementation.guardian;
+
+import org.apache.tuscany.sca.implementation.guardian.*;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.implementation.guardian.common.Context;
+import org.apache.tuscany.sca.implementation.guardian.common.GlobalException;
+import org.apache.tuscany.sca.implementation.guardian.impl.GuardianMemberImpl;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class GuardianImplementationTest {
+
+// private SCADomain scaDomain;
+// private GuardianGroup guardian;
+//
+// @Before
+// public void init() throws Exception {
+// scaDomain = SCADomain.newInstance("org/apache/tuscany/sca/implementation/guardian/guardianTest.composite");
+// guardian = scaDomain.getService(GuardianGroup.class, "GuardianComponent");
+// }
+//
+// @Test
+// public void enabelContextTest() throws Exception {
+// guardian.enableContext(Context.INIT_CONTEXT);
+// }
+//
+// @After
+// public void destroy() {
+// scaDomain.close();
+// }
+ public static void main(String... args) {
+
+ SCADomain scaDomain = SCADomain.newInstance("org/apache/tuscany/sca/implementation/guardian/guardianTest.composite");
+ GuardianGroup guardian = scaDomain.getService(GuardianGroup.class, "GuardianComponent");
+
+ System.out.println("\n#EnableContext invocation");
+ guardian.enableContext(Context.INIT_CONTEXT);
+
+ System.out.println("\n#RemoveContext invocation");
+ guardian.removeContext();
+
+ System.out.println("\n#CheckExceptionStatus invocation");
+ guardian.checkExceptionStatus();
+
+ System.out.println("\n#CheckExceptionStatus invocation");
+ boolean value = guardian.propagate(new GlobalException());
+ System.out.println("returned value: " + value);
+
+ System.out.println("\n#AddGuardianMember invocation");
+ guardian.addGuardianMember(new GuardianMemberImpl());
+
+ System.out.println("\n#RemoveGuardianMember invocation");
+ value = guardian.removeGuardianMember(new GuardianMemberImpl());
+ System.out.println("returned value: " + value);
+
+ }
+
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/LCATestCase.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/LCATestCase.java
new file mode 100644
index 0000000000..3c5e6b1b19
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/LCATestCase.java
@@ -0,0 +1,115 @@
+/*
+ * 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.implementation.guardian;
+
+import java.io.FileInputStream;
+import org.apache.tuscany.sca.implementation.guardian.common.ResolutionTreeUtils;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Map;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+import org.junit.Test;
+import org.apache.axiom.om.OMElement;
+import java.util.List;
+import junit.framework.Assert;
+import org.apache.tuscany.sca.implementation.guardian.xml.ResolutionTreesProcessor;
+import org.junit.Before;
+
+public class LCATestCase {
+
+ private ResolutionTreeUtils treeUtils;
+
+ @Before
+ public void init() throws Exception {
+ ResolutionTreesProcessor processor = new ResolutionTreesProcessor();
+
+ FileInputStream fileInputStream = new FileInputStream("src/main/resources/org/apache/" +
+ "tuscany/sca/implementation/guardian/lcaTest.xml");
+ XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(fileInputStream);
+
+
+ ResolutionTrees policy = processor.read(reader);
+ Map<String, OMElement> resolutionTrees = policy.getResolutionTreeElements();
+
+ List<OMElement> rootElements = getRootElements(resolutionTrees.values());
+
+ treeUtils = new ResolutionTreeUtils();
+ treeUtils.setRoot(rootElements.get(0));
+ }
+
+ @Test
+ public void testLCAEx2Ex2() throws Exception {
+ String lca = treeUtils.getLowestCommonAncestor("Exception2", "Exception2");
+ System.out.println("lca: " + lca);
+ Assert.assertEquals("Exception2", lca);
+ }
+
+ @Test
+ public void testLCAEx2Ex3() throws Exception {
+ String lca = treeUtils.getLowestCommonAncestor("Exception2", "Exception3");
+ Assert.assertEquals("Exception1", lca);
+ }
+
+ @Test
+ public void testLCAEx2Ex8() throws Exception {
+ String lca = treeUtils.getLowestCommonAncestor("Exception2", "Exception8");
+ Assert.assertEquals("Exception1", lca);
+ }
+
+ @Test
+ public void testLCAEx4Ex3() throws Exception {
+ String lca = treeUtils.getLowestCommonAncestor("Exception4", "Exception3");
+ Assert.assertEquals("Exception1", lca);
+ }
+
+ @Test
+ public void testLCAEx4Ex5() throws Exception {
+ String lca = treeUtils.getLowestCommonAncestor("Exception4", "Exception5");
+ Assert.assertEquals("Exception2", lca);
+ }
+
+ @Test
+ public void testLCAEx6Ex7() throws Exception {
+ String lca = treeUtils.getLowestCommonAncestor("Exception6", "Exception7");
+ Assert.assertEquals("Exception3", lca);
+ }
+
+ @Test
+ public void testLCAEx1Ex8() throws Exception {
+ String lca = treeUtils.getLowestCommonAncestor("Exception1", "Exception8");
+ Assert.assertEquals("Exception1", lca);
+ }
+
+ @Test
+ public void testLCAEx2Ex5() throws Exception {
+ String lca = treeUtils.getLowestCommonAncestor("Exception2", "Exception5");
+ Assert.assertEquals("Exception2", lca);
+ }
+
+ private List<OMElement> getRootElements(Collection<OMElement> resolutionTrees) {
+ List<OMElement> rootElements = new LinkedList<OMElement>();
+
+ for (OMElement resolutionTree : resolutionTrees) {
+ rootElements.add(resolutionTree.getFirstElement());
+ }
+
+ return rootElements;
+ }
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/ApplyUpdateFailureException.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/ApplyUpdateFailureException.java
new file mode 100644
index 0000000000..b08b26942d
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/ApplyUpdateFailureException.java
@@ -0,0 +1,22 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+public class ApplyUpdateFailureException extends RuntimeException {
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/BackupFailedException.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/BackupFailedException.java
new file mode 100644
index 0000000000..25adf1d739
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/BackupFailedException.java
@@ -0,0 +1,24 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.implementation.guardian.common.GlobalException;
+
+public class BackupFailedException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/BackupJoinedException.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/BackupJoinedException.java
new file mode 100644
index 0000000000..f0d29f461f
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/BackupJoinedException.java
@@ -0,0 +1,24 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.implementation.guardian.common.GlobalException;
+
+public class BackupJoinedException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/Node.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/Node.java
new file mode 100644
index 0000000000..6aa9456816
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/Node.java
@@ -0,0 +1,37 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+import org.osoa.sca.annotations.OneWay;
+
+public interface Node {
+
+ @OneWay
+ public void execute();
+
+ public void sendUpdate(String s);
+
+ public void applyUpdate();
+
+ public String getID();
+
+ public void kill();
+
+ public boolean isDead();
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/NodeImpl.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/NodeImpl.java
new file mode 100644
index 0000000000..37f4f529f0
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/NodeImpl.java
@@ -0,0 +1,282 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.tuscany.sca.implementation.guardian.GuardianMember;
+import org.apache.tuscany.sca.implementation.guardian.common.Context;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.OneWay;
+
+@Scope("COMPOSITE")
+public class NodeImpl implements Node, TestInterface {
+
+ private static int PRIMARY = 0;
+ private static int BACKUP = 1;
+ private boolean isDead;
+ private Context mainContext;
+ private Context primaryContext;
+ private Context backupContext;
+ private int role;
+ private String pID;
+ private Queue<String> updates;
+ @Reference(name = "guardian_member", required = true)
+ public GuardianMember gm;
+ @Reference(name = "nodes", required = true)
+ public List<Node> nodeList;
+ private boolean forcePSFException;
+ private boolean forceAUFException;
+ private int upcount;
+
+ public NodeImpl() {
+
+ mainContext = new Context("MAIN");
+ mainContext.addException(PrimaryFailedException.class);
+ mainContext.addException(PrimaryExistsException.class);
+
+ primaryContext = new Context("PRIMARY");
+ primaryContext.addException(BackupFailedException.class);
+ primaryContext.addException(BackupJoinedException.class);
+ primaryContext.addException(PrimaryServiceFailureException.class);
+
+ backupContext = new Context("BACKUP", null);
+
+ updates = new LinkedList();
+
+ isDead = true;
+
+ nodeList = new LinkedList<Node>();
+
+ forcePSFException = false;
+ forceAUFException = false;
+ }
+
+ @Init
+ public void init() {
+ pID = gm.getParticipantIdentifier();
+ }
+
+ @OneWay
+ public void execute() {
+ isDead = false;
+ gm.enableContext(mainContext);
+ role = PRIMARY;
+
+ while (true) {
+
+ //blockingCheck();
+
+ try {
+ System.out.println(pID + "#Main context: ");
+ sleep(pID + "#Sleeping at main context...", 4000);
+
+ gm.checkExceptionStatus();
+
+ if (role == PRIMARY) {
+ //Config as primary then...
+ primaryService();
+ } else {
+ //Config as backup then...
+ backupService();
+ }
+
+
+ } catch (PrimaryExistsException ex) {
+ System.out.println(pID + "# Exception captured!: PrimaryExistsException");
+ role = BACKUP;
+
+ } catch (PrimaryFailedException ex) {
+ System.out.println(pID + "# Exception captured!: PrimaryFailedException");
+ System.out.println(pID + "#Needs propagation?: " + gm.propagate(ex));
+
+ if (gm.propagate(ex)) {
+ //throw ex;
+ this.kill();
+ ex.printStackTrace();
+ return;
+ }
+
+ role = PRIMARY;
+
+ } catch (BackupFailedException ex) {
+ System.out.println(pID + "# Exception captured!: BackupFailedException");
+ System.out.println(pID + "#Needs propagation?: " + gm.propagate(ex));
+
+ if (gm.propagate(ex)) {
+ //throw ex;
+ this.kill();
+ ex.printStackTrace();
+ return;
+ }
+ }
+ }
+ }
+
+ private void primaryService() {
+ boolean backupAvailable = isThereBackupAvailable();
+
+ upcount = 1;
+
+ while (true) {
+
+ gm.enableContext(primaryContext);
+
+ //blockingCheck();
+
+ try {
+ System.out.println(pID + "#Primary context: ");
+ sleep(pID + "#Sleeping at primary context...", 4000);
+ gm.checkExceptionStatus();
+
+ //Process the request then...
+ System.out.println(pID + "#Processing the request...");
+
+ //Check for an internal error
+ if (forcePSFException) {
+ throw new PrimaryServiceFailureException();
+ }
+
+ if (backupAvailable) {
+
+ if (!updateBackups()) {
+ backupAvailable = isThereBackupAvailable();
+ }
+
+ } else {
+ System.out.println(pID + "#No backup available to send updates!");
+ //backupAvailable = isThereBackupAvailable();
+ }
+ //send the reply to the client
+ System.out.println(pID + "#Sending the reply to the client...");
+
+ } catch (PrimaryServiceFailureException ex) {
+ System.out.println(pID + "# Exception captured!: PrimaryServiceFailureException");
+ gm.gthrow(new PrimaryFailedException(), null);
+ } catch (BackupFailedException ex) {
+ System.out.println(pID + "# Exception captured!: BackupFailedException");
+ //backupAvailable = false;
+ backupAvailable = isThereBackupAvailable();
+ } catch (BackupJoinedException ex) {
+ System.out.println(pID + "# Exception captured!: BackupJoinedException");
+ backupAvailable = true;
+ } finally {
+ gm.removeContext();
+ }
+ }
+ }
+
+ private boolean updateBackups() {
+ boolean flag = false;
+
+ for (Node n : nodeList) {
+ if (!n.isDead()) {
+ n.sendUpdate("Update " + upcount);
+ flag = true;
+ }
+ }
+ if (flag) {
+ upcount++;
+ }
+
+ return flag;
+ }
+
+ private void backupService() {
+ while (true) {
+
+ gm.enableContext(backupContext);
+
+ //blockingCheck();
+
+ try {
+ System.out.println(pID + "#Backup context: ");
+ sleep(pID + "#Sleeping at backup service", 4000);
+ gm.checkExceptionStatus();
+
+ applyUpdate();
+
+ if (forceAUFException) {
+ throw new ApplyUpdateFailureException();
+ }
+
+ } catch (ApplyUpdateFailureException ex) {
+ System.out.println(pID + "# Exception captured!: ApplyUpdateFailureException");
+ gm.gthrow(new BackupFailedException(), null);
+ } finally {
+ gm.removeContext();
+ }
+ }
+ }
+
+ public String getID() {
+ return gm.getParticipantIdentifier();
+ }
+
+ private void sleep(String msg, int millis) {
+ try {
+ System.out.println(msg);
+ Thread.sleep(millis);
+ } catch (InterruptedException ex) {
+ Logger.getLogger(NodeImpl.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+ private boolean isThereBackupAvailable() {
+ for (Node n : nodeList) {
+ if (!n.isDead()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void kill() {
+ isDead = true;
+ }
+
+ public boolean isDead() {
+ return isDead;
+ }
+
+ public void sendUpdate(String update) {
+ System.out.println(pID + "#Receiving updates from primary: " + update);
+ updates.offer(update);
+ }
+
+ public void applyUpdate() {
+ if (!updates.isEmpty()) {
+ System.out.println(pID + "#Applying the updates received from the primary: " + updates.poll());
+ }
+ }
+
+ public void forcePrimaryServiceFailureException() {
+ forcePSFException = true;
+ }
+
+ public void forceApplyUpdateFailureException() {
+ forceAUFException = true;
+ }
+}
+
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryBackupFailedTogetherException.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryBackupFailedTogetherException.java
new file mode 100644
index 0000000000..5521caa550
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryBackupFailedTogetherException.java
@@ -0,0 +1,26 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.implementation.guardian.common.GlobalException;
+
+public class PrimaryBackupFailedTogetherException extends GlobalException {
+
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryExistsException.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryExistsException.java
new file mode 100644
index 0000000000..d6297a1012
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryExistsException.java
@@ -0,0 +1,24 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.implementation.guardian.common.GlobalException;
+
+public class PrimaryExistsException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryFailedException.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryFailedException.java
new file mode 100644
index 0000000000..cc1715d077
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryFailedException.java
@@ -0,0 +1,24 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.implementation.guardian.common.GlobalException;
+
+public class PrimaryFailedException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryServiceFailureException.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryServiceFailureException.java
new file mode 100644
index 0000000000..0bcfb72bc8
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/PrimaryServiceFailureException.java
@@ -0,0 +1,24 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.implementation.guardian.common.GlobalException;
+
+public class PrimaryServiceFailureException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/TestInterface.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/TestInterface.java
new file mode 100644
index 0000000000..7e7bd35cd2
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/common/TestInterface.java
@@ -0,0 +1,26 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.common;
+
+public interface TestInterface {
+
+ public void forcePrimaryServiceFailureException();
+
+ public void forceApplyUpdateFailureException();
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/concurrentExceptions/Launch.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/concurrentExceptions/Launch.java
new file mode 100644
index 0000000000..ab0c21dba6
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/concurrentExceptions/Launch.java
@@ -0,0 +1,69 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.concurrentExceptions;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.implementation.guardian.itests.primaryBackup.common.Node;
+import org.apache.tuscany.sca.implementation.guardian.itests.primaryBackup.common.TestInterface;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class Launch {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("org/apache/tuscany/sca/" +
+ "implementation/guardian/itests/primaryBackup/" +
+ "concurrentExceptions/primaryBackup.composite");
+
+ System.out.println("Starting participat1...");
+ Node c = scaDomain.getService(Node.class, "Participant1");
+ c.execute();
+
+ System.in.read();
+
+ System.out.println("Starting participant2...");
+ Node c2 = scaDomain.getService(Node.class, "Participant2");
+ c2.execute();
+
+ System.in.read();
+
+ System.out.println("Starting participant3...");
+ Node c3 = scaDomain.getService(Node.class, "Participant3");
+ c3.execute();
+
+ System.in.read();
+
+ System.out.println("Starting participant4...");
+ Node c4 = scaDomain.getService(Node.class, "Participant4");
+ c4.execute();
+
+ System.in.read();
+
+ System.out.println("Forcing exception ocurrence at participant1...");
+ TestInterface t = scaDomain.getService(TestInterface.class, "Participant1");
+ t.forcePrimaryServiceFailureException();
+
+ System.out.println("Forcing exception ocurrence at participant2...");
+ TestInterface t2 = scaDomain.getService(TestInterface.class, "Participant2");
+ t2.forceApplyUpdateFailureException();
+
+ System.in.read();
+
+ scaDomain.close();
+ }
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/simple/Launch.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/simple/Launch.java
new file mode 100644
index 0000000000..86df9bc5f9
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/simple/Launch.java
@@ -0,0 +1,55 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.simple;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.implementation.guardian.itests.primaryBackup.common.Node;
+import org.apache.tuscany.sca.implementation.guardian.itests.primaryBackup.common.TestInterface;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class Launch {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("org/apache/tuscany/sca/" +
+ "implementation/guardian/itests/primaryBackup/" +
+ "simple/primaryBackup.composite");
+
+ System.out.println("Starting participat1...");
+ Node c = scaDomain.getService(Node.class, "Participant1");
+ c.execute();
+
+ System.in.read();
+
+ System.out.println("Starting participant2...");
+ Node c2 = scaDomain.getService(Node.class, "Participant2");
+ c2.execute();
+
+ System.in.read();
+
+ System.out.println("Forcing exception ocurrence at participant1...");
+ TestInterface t = scaDomain.getService(TestInterface.class, "Participant1");
+ t.forcePrimaryServiceFailureException();
+
+
+ System.in.read();
+
+ scaDomain.close();
+ }
+}
+
diff --git a/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/simple/Launch2.java b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/simple/Launch2.java
new file mode 100644
index 0000000000..1c5fd26745
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/test/java/org/apache/tuscany/sca/implementation/guardian/itests/primaryBackup/simple/Launch2.java
@@ -0,0 +1,54 @@
+/*
+ * 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.implementation.guardian.itests.primaryBackup.simple;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.implementation.guardian.itests.primaryBackup.common.Node;
+import org.apache.tuscany.sca.implementation.guardian.itests.primaryBackup.common.TestInterface;
+
+public class Launch2 {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("org/apache/tuscany/sca/" +
+ "implementation/guardian/itests/primaryBackup/" +
+ "simple/primaryBackup.composite");
+
+ System.out.println("Starting participat1...");
+ Node c = scaDomain.getService(Node.class, "Participant1");
+ c.execute();
+
+ System.in.read();
+
+ System.out.println("Starting participant2...");
+ Node c2 = scaDomain.getService(Node.class, "Participant2");
+ c2.execute();
+
+ System.in.read();
+
+ System.out.println("Forcing exception ocurrence at participant2...");
+ TestInterface t = scaDomain.getService(TestInterface.class, "Participant2");
+ t.forceApplyUpdateFailureException();
+
+ System.in.read();
+
+ scaDomain.close();
+ }
+}
+