summaryrefslogtreecommitdiffstats
path: root/sandbox/dougsleite/guardian-model/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/dougsleite/guardian-model/src/test')
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/ApplyUpdateFailureException.java22
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/GuardianLaunch.java31
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Launch.java50
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Launch2.java50
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Node.java34
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/NodeImpl.java277
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Participant1Launch.java45
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Participant2Launch.java45
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/PrimaryServiceFailureException.java24
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/TestInterface.java26
10 files changed, 604 insertions, 0 deletions
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/ApplyUpdateFailureException.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/ApplyUpdateFailureException.java
new file mode 100644
index 0000000000..a40667ff8d
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/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.guardian.itests;
+
+public class ApplyUpdateFailureException extends RuntimeException {
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/GuardianLaunch.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/GuardianLaunch.java
new file mode 100644
index 0000000000..11ede178d0
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/GuardianLaunch.java
@@ -0,0 +1,31 @@
+/*
+ * 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.guardian.itests;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class GuardianLaunch {
+
+ public static void main(String... args) throws IOException {
+
+ SCADomain scaDomain = SCADomain.newInstance("guardiangroup.composite");
+ System.in.read();
+ }
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Launch.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Launch.java
new file mode 100644
index 0000000000..bb4b41163f
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Launch.java
@@ -0,0 +1,50 @@
+/*
+ * 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.guardian.itests;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class Launch {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("server-backup.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/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Launch2.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Launch2.java
new file mode 100644
index 0000000000..7b9e3fc1de
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Launch2.java
@@ -0,0 +1,50 @@
+/*
+ * 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.guardian.itests;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class Launch2 {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("server-backup.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();
+ }
+}
+
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Node.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Node.java
new file mode 100644
index 0000000000..6557aa4732
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Node.java
@@ -0,0 +1,34 @@
+/*
+ * 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.guardian.itests;
+
+import org.apache.tuscany.sca.guardian.BlockingInterface;
+import org.osoa.sca.annotations.OneWay;
+
+public interface Node extends BlockingInterface {
+
+ @OneWay
+ public void execute();
+
+ public void sendUpdate(String s);
+
+ public void applyUpdate();
+
+ public boolean isExecuting();
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/NodeImpl.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/NodeImpl.java
new file mode 100644
index 0000000000..86d2e9bbc6
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/NodeImpl.java
@@ -0,0 +1,277 @@
+/*
+ * 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.guardian.itests;
+
+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.guardian.Context;
+import org.apache.tuscany.sca.guardian.GlobalException;
+import org.apache.tuscany.sca.guardian.GuardianMember;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+import org.apache.tuscany.sca.guardian.exceptions.BackupFailedException;
+import org.apache.tuscany.sca.guardian.exceptions.BackupJoinedException;
+import org.apache.tuscany.sca.guardian.exceptions.PrimaryExistsException;
+import org.apache.tuscany.sca.guardian.exceptions.PrimaryFailedException;
+import org.osoa.sca.annotations.Destroy;
+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 isBlocked;
+ private Context mainContext;
+ private Context primaryContext;
+ private Context backupContext;
+ private List<GlobalException> exListMain;
+ private List<GlobalException> exListPrimary;
+ private int role;
+ private boolean isExecuting;
+ private String pID;
+ private Queue<String> updates;
+ @Reference(name = "guardian_member", required = true)
+ public GuardianMember gm;
+ @Reference(name = "node", required = true)
+ public Node node;
+ private boolean forcePSFException;
+ private boolean forceAUFException;
+
+ public NodeImpl() {
+ exListMain = new LinkedList();
+ exListMain.add(new PrimaryFailedException());
+ exListMain.add(new PrimaryExistsException());
+
+ exListPrimary = new LinkedList();
+ exListPrimary.add(new BackupFailedException());
+ exListPrimary.add(new BackupJoinedException());
+ exListPrimary.add(new PrimaryServiceFailureException());
+
+ mainContext = new Context("MAIN", exListMain);
+ primaryContext = new Context("PRIMARY", exListPrimary);
+ backupContext = new Context("BACKUP", null);
+
+ updates = new LinkedList();
+
+ isBlocked = false;
+ isExecuting = false;
+
+ node = null;
+
+ forcePSFException = false;
+ forceAUFException = false;
+ }
+
+ @Init
+ public void init() {
+ gm.setService(this);
+ pID = gm.getParticipantIdentifier();
+ }
+
+ @Destroy
+ public void destroy() {
+ gm.removeService();
+ }
+
+ public boolean isExecuting() {
+ return isExecuting;
+ }
+
+ @OneWay
+ public void execute() {
+ isExecuting = true;
+ gm.enableContext(mainContext);
+ role = PRIMARY;
+
+ while (true) {
+ 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");
+ System.out.println(pID + "#Needs propagation?: " + gm.propagate(ex));
+
+ if (gm.propagate(ex)) {
+ throw ex;
+ }
+
+ 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;
+ 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;
+ ex.printStackTrace();
+ return;
+ }
+ }
+ }
+ }
+
+ 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 void primaryService() {
+ boolean backupAvailable = false;
+ int upcount = 1;
+
+ while (true) {
+
+ gm.enableContext(primaryContext);
+
+ 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 && node.isExecuting()) {
+ node.sendUpdate("Update " + upcount);
+ upcount++;
+ } else {
+ System.out.println(pID + "#No backup available to send updates!");
+ }
+ //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;
+ } catch (BackupJoinedException ex) {
+ System.out.println(pID + "# Exception captured!: BackupJoinedException");
+ backupAvailable = true;
+ } finally {
+ gm.removeContext();
+ }
+ }
+ }
+
+ private void backupService() {
+ while (true) {
+
+ gm.enableContext(backupContext);
+
+ 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();
+ }
+ }
+ }
+
+ //FIXME - It is not working asynchronously
+ //@OneWay
+ public void block() {
+ System.out.println(pID + "#Participant blocked!");
+ isBlocked = true;
+
+// while (isBlocked) {
+// try {
+// Thread.sleep(5000);
+// } catch (InterruptedException ex) {
+// Logger.getLogger(ComponentImpl.class.getName()).log(Level.SEVERE, null, ex);
+// }
+// }
+ }
+
+ public boolean isBlocked() {
+ return isBlocked;
+ }
+
+ //@OneWay
+ public void unblock() {
+ System.out.println(pID + "#Participant unblocked!");
+ isBlocked = false;
+ }
+
+ public void sendUpdate(String update) {
+ System.out.println(pID + "#Receiving updates from primary: " + update);
+ updates.offer(update);
+ }
+
+ public void applyUpdate() {
+ 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/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Participant1Launch.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Participant1Launch.java
new file mode 100644
index 0000000000..a5c360701a
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Participant1Launch.java
@@ -0,0 +1,45 @@
+/*
+ * 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.guardian.itests;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.guardian.exceptions.PrimaryFailedException;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class Participant1Launch {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("participant1.composite");
+
+ try {
+
+ System.out.println("Starting participat1...");
+ Node c = scaDomain.getService(Node.class, "Participant1");
+ c.execute();
+
+ System.in.read();
+
+ } catch (PrimaryFailedException ex) {
+ System.out.println("Init#Exception captured!: PrimaryFailedException");
+
+ } finally {
+ scaDomain.close();
+ }
+ }
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Participant2Launch.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Participant2Launch.java
new file mode 100644
index 0000000000..3478e4e105
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/Participant2Launch.java
@@ -0,0 +1,45 @@
+/*
+ * 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.guardian.itests;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.guardian.exceptions.PrimaryFailedException;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+public class Participant2Launch {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("participant2.composite");
+
+ try {
+
+ System.out.println("Starting participant2...");
+ Node c2 = scaDomain.getService(Node.class, "Participant2");
+ c2.execute();
+
+ System.in.read();
+
+ } catch (PrimaryFailedException ex) {
+ System.out.println("Init#Exception captured!: PrimaryFailedException");
+
+ } finally {
+ scaDomain.close();
+ }
+ }
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/PrimaryServiceFailureException.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/PrimaryServiceFailureException.java
new file mode 100644
index 0000000000..3e8f6af7a6
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/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.guardian.itests;
+
+import org.apache.tuscany.sca.guardian.GlobalException;
+
+public class PrimaryServiceFailureException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/TestInterface.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/TestInterface.java
new file mode 100644
index 0000000000..5368de138f
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/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.guardian.itests;
+
+public interface TestInterface {
+
+ public void forcePrimaryServiceFailureException();
+
+ public void forceApplyUpdateFailureException();
+}