1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 2002, 2014 Oracle and/or its affiliates.  All rights reserved.
5  *
6  * $Id$
7  */
8 package com.sleepycat.je.rep.dual.trigger;
9 
10 import java.util.Arrays;
11 import java.util.LinkedList;
12 import java.util.List;
13 
14 import org.junit.Before;
15 
16 import com.sleepycat.je.DatabaseEntry;
17 import com.sleepycat.je.Transaction;
18 import com.sleepycat.je.TransactionConfig;
19 import com.sleepycat.je.rep.util.RepEnvWrapper;
20 import com.sleepycat.je.rep.utilint.RepTestUtils;
21 import com.sleepycat.je.trigger.ReplicatedDatabaseTrigger;
22 import com.sleepycat.je.trigger.TestBase;
23 import com.sleepycat.je.trigger.Trigger;
24 
25 /**
26  * Replicated version of the trigger unit test. The test repeats the trigger
27  * tests but now across the replication group ensuring that the triggers are
28  * invoked at every node in the replication group.
29  */
30 public class InvokeTest extends com.sleepycat.je.trigger.InvokeTest {
31 
32     @Before
setUp()33     public void setUp()
34         throws Exception {
35 
36         super.setUp();
37         nNodes = ((RepEnvWrapper)getWrapper()).getRepEnvInfo(envRoot).length;
38         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
39     }
40 
41     @Override
testAddRemoveTriggerExistindDbTrans()42     public void testAddRemoveTriggerExistindDbTrans() {
43         // TODO: Need equivalent tests once #18262 is fixed
44     }
45 
46     @Override
testAddRemoveTriggerExistindDbAuto()47     public void testAddRemoveTriggerExistindDbAuto() {
48      // TODO: Need equivalent tests once #18262 is fixed
49     }
50 
51     /*
52      * All verifyXXX methods are overriden to ensure that the entire
53      * replication group is in sync before verifying that the triggers have
54      * been invoked.
55      */
56     @Override
verifyOpen(final int nCreate, int nOpen)57     protected void verifyOpen(final int nCreate, int nOpen) {
58         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
59         super.verifyOpen(nCreate, nOpen);
60     }
61 
62     @Override
verifyClose(@uppressWarningsR) final int nClose)63     protected void verifyClose(@SuppressWarnings("unused") final int nClose) {
64         /* closes are asynchronous on the Replica. */
65     }
66 
67     @Override
verifyRename(final String newName, final int nRename)68     protected void verifyRename(final String newName,
69                                 final int nRename) {
70         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
71         super.verifyRename(newName, nRename);
72     }
73 
74     @Override
verifyTruncate(final int nTruncate)75     protected void verifyTruncate(final int nTruncate) {
76         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
77         super.verifyTruncate(nTruncate);
78     }
79 
80     @Override
verifyRemove(final int nRemove)81     protected void verifyRemove(final int nRemove) {
82         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
83         super.verifyRemove(nRemove);
84     }
85 
86     @Override
verifyCommit(final int nCommit)87     protected void verifyCommit(final int nCommit) {
88         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
89         super.verifyCommit(nCommit);
90     }
91 
92     @Override
verifyAbort(final int nAbort)93     protected void verifyAbort(final int nAbort) {
94         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
95         super.verifyAbort(nAbort);
96     }
97 
98     @Override
verifyDelete(final int nDelete, final DatabaseEntry key, final DatabaseEntry oldData)99     protected void verifyDelete(final int nDelete,
100                                 final DatabaseEntry key,
101                                 final DatabaseEntry oldData) {
102         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
103         super.verifyDelete(nDelete, key, oldData);
104 
105     }
106 
107     @Override
verifyPut(final int nPut, final DatabaseEntry key, final DatabaseEntry newData, final DatabaseEntry oldData)108     protected void verifyPut(final int nPut,
109                              final DatabaseEntry key,
110                              final DatabaseEntry newData,
111                              final DatabaseEntry oldData) {
112         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
113         super.verifyPut(nPut, key, newData, oldData);
114     }
115 
116     @Override
verifyAddTrigger(final int nAddTrigger)117     protected void verifyAddTrigger(final int nAddTrigger) {
118         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
119         super.verifyAddTrigger(nAddTrigger);
120     }
121 
122     @Override
verifyRemoveTrigger(final int nRemoveTrigger)123     protected void verifyRemoveTrigger(final int nRemoveTrigger) {
124         ((RepEnvWrapper)getWrapper()).syncGroup(envRoot);
125         super.verifyRemoveTrigger(nRemoveTrigger);
126     }
127 
128     @Override
getTransactionConfig()129     protected TransactionConfig getTransactionConfig() {
130         return RepTestUtils.SYNC_SYNC_ALL_TC;
131     }
132 
133     @Override
getTriggers()134     protected List<Trigger> getTriggers() {
135         return new LinkedList<Trigger>(Arrays.asList((Trigger) new RDBT("t1"),
136                              (Trigger) new RDBT("t2")));
137     }
138 
139     @Override
getTransientTriggers()140     protected List<Trigger> getTransientTriggers() {
141         return new LinkedList<Trigger>(Arrays.asList((Trigger) new TRDBT("tt1"),
142                              (Trigger) new TRDBT("tt2")));
143     }
144 
145     @Override
getTriggersPlusOne()146     protected List<Trigger> getTriggersPlusOne() {
147         List<Trigger> triggers = getTriggers();
148         triggers.add(new InvokeTest.RDBT("t3"));
149         return triggers;
150     }
151 
152     @SuppressWarnings("unused")
153     public static class RDBT extends TestBase.DBT
154         implements ReplicatedDatabaseTrigger {
155 
156         private static final long serialVersionUID = 1L;
157 
RDBT(String name)158         public RDBT(String name) {
159             super(name);
160         }
161 
162         /* Awaits syncup unit tests. */
163 
repeatCreate(Transaction txn)164         public void repeatCreate(Transaction txn) {
165             // TODO Auto-generated method stub
166         }
167 
repeatDelete(Transaction txn, DatabaseEntry key)168         public void repeatDelete(Transaction txn, DatabaseEntry key) {
169             // TODO Auto-generated method stub
170         }
171 
repeatPut(Transaction txn, DatabaseEntry key, DatabaseEntry newData)172         public void repeatPut(Transaction txn,
173                               DatabaseEntry key,
174                               DatabaseEntry newData) {
175             // TODO Auto-generated method stub
176         }
177 
repeatRemove(Transaction txn)178         public void repeatRemove(Transaction txn) {
179             // TODO Auto-generated method stub
180         }
181 
repeatRename(Transaction txn, String newName)182         public void repeatRename(Transaction txn, String newName) {
183             // TODO Auto-generated method stub
184         }
185 
repeatTransaction(Transaction txn)186         public void repeatTransaction(Transaction txn) {
187             // TODO Auto-generated method stub
188         }
189 
repeatTruncate(Transaction txn)190         public void repeatTruncate(Transaction txn) {
191             // TODO Auto-generated method stub
192         }
193 
repeatAddTrigger(Transaction txn)194         public void repeatAddTrigger(Transaction txn) {
195             // TODO Auto-generated method stub
196 
197         }
198 
repeatRemoveTrigger(Transaction txn)199         public void repeatRemoveTrigger(Transaction txn) {
200             // TODO Auto-generated method stub
201 
202         }
203     }
204 
205     @SuppressWarnings("unused")
206     public static class TRDBT extends TestBase.TDBT
207         implements ReplicatedDatabaseTrigger {
208 
TRDBT(String name)209         public TRDBT(String name) {
210             super(name);
211         }
212 
213         /* Awaits syncup unit tests. */
214 
repeatCreate(Transaction txn)215         public void repeatCreate(Transaction txn) {
216             // TODO Auto-generated method stub
217         }
218 
repeatDelete(Transaction txn, DatabaseEntry key)219         public void repeatDelete(Transaction txn, DatabaseEntry key) {
220             // TODO Auto-generated method stub
221         }
222 
repeatPut(Transaction txn, DatabaseEntry key, DatabaseEntry newData)223         public void repeatPut(Transaction txn,
224                               DatabaseEntry key,
225                               DatabaseEntry newData) {
226             // TODO Auto-generated method stub
227         }
228 
repeatRemove(Transaction txn)229         public void repeatRemove(Transaction txn) {
230             // TODO Auto-generated method stub
231         }
232 
repeatRename(Transaction txn, String newName)233         public void repeatRename(Transaction txn, String newName) {
234             // TODO Auto-generated method stub
235         }
236 
repeatTransaction(Transaction txn)237         public void repeatTransaction(Transaction txn) {
238             // TODO Auto-generated method stub
239         }
240 
repeatTruncate(Transaction txn)241         public void repeatTruncate(Transaction txn) {
242             // TODO Auto-generated method stub
243         }
244 
repeatAddTrigger(Transaction txn)245         public void repeatAddTrigger(Transaction txn) {
246             // TODO Auto-generated method stub
247 
248         }
249 
repeatRemoveTrigger(Transaction txn)250         public void repeatRemoveTrigger(Transaction txn) {
251             // TODO Auto-generated method stub
252 
253         }
254     }
255 }
256