summaryrefslogtreecommitdiffstats
path: root/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca
diff options
context:
space:
mode:
authordougsleite <dougsleite@13f79535-47bb-0310-9956-ffa450edef68>2009-07-06 12:41:48 +0000
committerdougsleite <dougsleite@13f79535-47bb-0310-9956-ffa450edef68>2009-07-06 12:41:48 +0000
commitf1dfba0cc9000fcf881267608c02b683dcf2f796 (patch)
treed7653d10bdec1ab0b404fd92092f8c8aef0c3b01 /sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca
parent6c479469ad629e1bc05e1e2eb4114941b4405f5a (diff)
- Restructured the iTest package
- Added a new test scenario: Primary-Backup with N backups - Added a new tag element (<affected_participants>) into the recovery rules XML file git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@791465 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/ApplyUpdateFailureException.java22
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/BackupFailedException.java24
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/BackupJoinedException.java24
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/Node.java34
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/NodeImpl.java288
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/PrimaryExistsException.java24
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/PrimaryFailedException.java24
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/PrimaryServiceFailureException.java24
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/TestInterface.java26
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch.java64
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch2.java70
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch3.java71
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch.java52
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch2.java52
-rw-r--r--sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch3.java63
15 files changed, 862 insertions, 0 deletions
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/ApplyUpdateFailureException.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/ApplyUpdateFailureException.java
new file mode 100644
index 0000000000..d7f0f763e2
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/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.guardian.itests.primaryBackup.common;
+
+public class ApplyUpdateFailureException extends RuntimeException {
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/BackupFailedException.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/BackupFailedException.java
new file mode 100644
index 0000000000..6660d6b42f
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/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.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.guardian.*;
+
+public class BackupFailedException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/BackupJoinedException.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/BackupJoinedException.java
new file mode 100644
index 0000000000..6d81d1933e
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/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.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.guardian.GlobalException;
+
+public class BackupJoinedException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/Node.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/Node.java
new file mode 100644
index 0000000000..9fb6a27a45
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/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.primaryBackup.common;
+
+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 String getID();
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/NodeImpl.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/NodeImpl.java
new file mode 100644
index 0000000000..5ff80e3472
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/NodeImpl.java
@@ -0,0 +1,288 @@
+/*
+ * 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.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.guardian.Context;
+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.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 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;
+
+ 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();
+
+ isBlocked = true;
+
+ nodeList = new LinkedList<Node>();
+
+ forcePSFException = false;
+ forceAUFException = false;
+ }
+
+ @Init
+ public void init() {
+ gm.setService(this);
+ pID = gm.getParticipantIdentifier();
+ }
+
+ @Destroy
+ public void destroy() {
+ gm.removeService();
+ }
+
+ @OneWay
+ public void execute() {
+ isBlocked = false;
+ 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;
+ this.block();
+ 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.block();
+ ex.printStackTrace();
+ return;
+ }
+ }
+ }
+ }
+
+ 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.isBlocked()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void primaryService() {
+ boolean backupAvailable = isThereBackupAvailable();
+ System.out.println("Backup available?: " + backupAvailable);
+ 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) {
+ for (Node n : nodeList) {
+ if (!n.isBlocked()) {
+ n.sendUpdate("Update " + upcount);
+ }
+ }
+ upcount++;
+ } 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 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() {
+ 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/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/PrimaryExistsException.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/PrimaryExistsException.java
new file mode 100644
index 0000000000..935c97966e
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/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.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.guardian.GlobalException;
+
+public class PrimaryExistsException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/PrimaryFailedException.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/PrimaryFailedException.java
new file mode 100644
index 0000000000..086e255e94
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/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.guardian.itests.primaryBackup.common;
+
+import org.apache.tuscany.sca.guardian.*;
+
+public class PrimaryFailedException extends GlobalException {
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/PrimaryServiceFailureException.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/PrimaryServiceFailureException.java
new file mode 100644
index 0000000000..46f52ea198
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/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.guardian.itests.primaryBackup.common;
+
+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/primaryBackup/common/TestInterface.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/common/TestInterface.java
new file mode 100644
index 0000000000..f659a15530
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/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.guardian.itests.primaryBackup.common;
+
+public interface TestInterface {
+
+ public void forcePrimaryServiceFailureException();
+
+ public void forceApplyUpdateFailureException();
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch.java
new file mode 100644
index 0000000000..333f231e59
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch.java
@@ -0,0 +1,64 @@
+/*
+ * 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.primaryBackup.nbackups;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.guardian.itests.primaryBackup.common.Node;
+import org.apache.tuscany.sca.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("primaryNbackups.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.in.read();
+
+ scaDomain.close();
+ }
+}
+
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch2.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch2.java
new file mode 100644
index 0000000000..94767c85dd
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch2.java
@@ -0,0 +1,70 @@
+/*
+ * 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.primaryBackup.nbackups;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.guardian.itests.primaryBackup.common.Node;
+import org.apache.tuscany.sca.guardian.itests.primaryBackup.common.TestInterface;
+
+public class Launch2 {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("primaryNbackups.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 participant2...");
+ TestInterface t = scaDomain.getService(TestInterface.class, "Participant2");
+ t.forceApplyUpdateFailureException();
+
+ System.in.read();
+
+ System.out.println("Forcing exception ocurrence at participant3...");
+ TestInterface t2 = scaDomain.getService(TestInterface.class, "Participant3");
+ t2.forceApplyUpdateFailureException();
+
+ System.in.read();
+
+ scaDomain.close();
+ }
+}
+
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch3.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch3.java
new file mode 100644
index 0000000000..83d8c90d79
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/nbackups/Launch3.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2009 douglas.
+ *
+ * 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.
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.guardian.itests.primaryBackup.nbackups;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.guardian.itests.primaryBackup.common.Node;
+import org.apache.tuscany.sca.guardian.itests.primaryBackup.common.TestInterface;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+/**
+ *
+ * @author douglas
+ */
+public class Launch3 {
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("primaryNbackups.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 participant2...");
+ TestInterface t = scaDomain.getService(TestInterface.class, "Participant2");
+ t.forceApplyUpdateFailureException();
+
+ System.in.read();
+
+ System.out.println("Forcing exception ocurrence at participant1...");
+ TestInterface t2 = scaDomain.getService(TestInterface.class, "Participant1");
+ t2.forcePrimaryServiceFailureException();
+
+ System.in.read();
+
+ scaDomain.close();
+ }
+}
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch.java
new file mode 100644
index 0000000000..66b7d0a18d
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch.java
@@ -0,0 +1,52 @@
+/*
+ * 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.primaryBackup.simple;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.guardian.itests.primaryBackup.common.Node;
+import org.apache.tuscany.sca.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("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/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch2.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch2.java
new file mode 100644
index 0000000000..34eedcaa13
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch2.java
@@ -0,0 +1,52 @@
+/*
+ * 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.primaryBackup.simple;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.guardian.itests.primaryBackup.common.Node;
+import org.apache.tuscany.sca.guardian.itests.primaryBackup.common.TestInterface;
+
+public class Launch2 {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("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();
+ }
+}
+
diff --git a/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch3.java b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch3.java
new file mode 100644
index 0000000000..780a8df464
--- /dev/null
+++ b/sandbox/dougsleite/guardian-model/src/test/java/org/apache/tuscany/sca/guardian/itests/primaryBackup/simple/Launch3.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2009 douglas.
+ *
+ * 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.
+ * under the License.
+ */
+package org.apache.tuscany.sca.guardian.itests.primaryBackup.simple;
+
+import java.io.IOException;
+import org.apache.tuscany.sca.guardian.GuardianGroup;
+import org.apache.tuscany.sca.guardian.GuardianMember;
+import org.apache.tuscany.sca.guardian.GuardianMemberImpl;
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+
+/**
+ *
+ * @author douglas
+ */
+public class Launch3 {
+
+ public static void main(String... args) throws IOException {
+ SCADomain scaDomain = SCADomain.newInstance("primarybackup-ws.composite");
+
+ System.out.println("Testing...");
+ GuardianGroup c = scaDomain.getService(GuardianGroup.class, "GuardianGroupComponent");
+
+ GuardianMember gm = new GuardianMemberImpl();
+ c.addGuardianMember(gm);
+ //c.enableContext(Context.INIT_CONTEXT);
+
+ System.in.read();
+
+// 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();
+ }
+}