1 package org.objectweb.celtix.bus.ws.rm; 2 3 import java.io.IOException ; 4 import java.math.BigInteger ; 5 import java.util.ArrayList ; 6 import java.util.Collection ; 7 8 9 import junit.framework.TestCase; 10 11 import org.easymock.classextension.EasyMock; 12 import org.easymock.classextension.IMocksControl; 13 import org.objectweb.celtix.Bus; 14 import org.objectweb.celtix.bindings.AbstractClientBinding; 15 import org.objectweb.celtix.bus.configuration.wsrm.SourcePolicyType; 16 import org.objectweb.celtix.bus.ws.addressing.AddressingPropertiesImpl; 17 import org.objectweb.celtix.buslifecycle.BusLifeCycleManager; 18 import org.objectweb.celtix.configuration.Configuration; 19 import org.objectweb.celtix.context.ObjectMessageContext; 20 import org.objectweb.celtix.context.ObjectMessageContextImpl; 21 import org.objectweb.celtix.ws.addressing.AddressingProperties; 22 import org.objectweb.celtix.ws.rm.Identifier; 23 import org.objectweb.celtix.ws.rm.SequenceAcknowledgement; 24 import org.objectweb.celtix.ws.rm.SequenceAcknowledgement.AcknowledgementRange; 25 import org.objectweb.celtix.ws.rm.SequenceType; 26 import org.objectweb.celtix.ws.rm.persistence.RMMessage; 27 import org.objectweb.celtix.ws.rm.persistence.RMSourceSequence; 28 import org.objectweb.celtix.ws.rm.persistence.RMStore; 29 import org.objectweb.celtix.ws.rm.policy.RMAssertionType; 30 import org.objectweb.celtix.ws.rm.wsdl.SequenceFault; 31 32 import static org.easymock.classextension.EasyMock.expect; 33 import static org.easymock.classextension.EasyMock.expectLastCall; 34 import static org.objectweb.celtix.ws.addressing.JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_OUTBOUND; 35 36 public class RMSourceTest extends TestCase { 37 38 private Bus bus; 39 private BusLifeCycleManager lcm; 40 private RMHandler handler; 41 private RMSource s; 42 private Configuration cfg; 43 private IMocksControl control; 44 45 public void setUp() { 46 control = EasyMock.createNiceControl(); 47 handler = control.createMock(RMHandler.class); 48 s = createSource(handler); 49 } 50 51 public void testRMSourceConstructor() { 52 assertNotNull(s.getRetransmissionQueue()); 53 assertNull(s.getCurrent()); 54 } 55 56 public void testGetSourcePolicies() { 57 SourcePolicyType sp = null; 58 handler.getConfiguration(); 59 expectLastCall().andReturn(cfg); 60 cfg.getObject(SourcePolicyType.class, "sourcePolicies"); 61 expectLastCall().andReturn(sp); 62 63 control.replay(); 64 assertNotNull(s.getSourcePolicies()); 65 control.verify(); 66 67 control.reset(); 68 sp = control.createMock(SourcePolicyType.class); 69 handler.getConfiguration(); 70 expectLastCall().andReturn(cfg); 71 cfg.getObject(SourcePolicyType.class, "sourcePolicies"); 72 expectLastCall().andReturn(sp); 73 control.replay(); 74 assertNotNull(s.getSourcePolicies()); 75 control.verify(); 76 } 77 78 public void testGetSequenceTerminationPolicies() { 79 SourcePolicyType sp = null; 80 handler.getConfiguration(); 81 expectLastCall().andReturn(cfg); 82 cfg.getObject(SourcePolicyType.class, "sourcePolicies"); 83 expectLastCall().andReturn(sp); 84 85 control.replay(); 86 assertNotNull(s.getSequenceTerminationPolicy()); 87 control.verify(); 88 } 89 90 public void testSequenceAccess() throws IOException , SequenceFault { 91 RMStore store = control.createMock(RMStore.class); 92 expect(handler.getStore()).andReturn(store).times(3); 93 store.createSourceSequence(EasyMock.isA(SourceSequence.class)); 94 expectLastCall().times(2); 95 store.removeSourceSequence(EasyMock.isA(Identifier.class)); 96 97 control.replay(); 98 Identifier sid = s.generateSequenceIdentifier(); 99 SourceSequence seq = new SourceSequence(sid); 100 assertNull(s.getCurrent()); 101 s.addSequence(seq); 102 assertNotNull(s.getSequence(sid)); 103 assertNull(s.getCurrent()); 104 SourceSequence anotherSeq = new SourceSequence(s.generateSequenceIdentifier()); 105 s.addSequence(anotherSeq); 106 assertNull(s.getCurrent()); 107 assertEquals(2, s.getAllSequences().size()); 108 s.removeSequence(seq); 109 assertEquals(1, s.getAllSequences().size()); 110 assertNull(s.getSequence(sid)); 111 control.verify(); 112 } 113 114 public void testCurrent() { 115 Identifier sid = s.generateSequenceIdentifier(); 116 SourceSequence seq = new SourceSequence(sid); 117 assertNull(s.getCurrent()); 118 Identifier inSid = s.generateSequenceIdentifier(); 119 assertNull(s.getCurrent(inSid)); 120 s.setCurrent(seq); 121 assertNotNull(s.getCurrent()); 122 assertSame(seq, s.getCurrent()); 123 assertNull(s.getCurrent(inSid)); 124 s.setCurrent(inSid, seq); 125 assertNotNull(s.getCurrent(inSid)); 126 assertSame(seq, s.getCurrent(inSid)); 127 assertNull(s.getCurrent(sid)); 128 } 129 130 public void testAddUnacknowledged() { 131 ObjectMessageContext ctx = new ObjectMessageContextImpl(); 132 AddressingProperties maps = new AddressingPropertiesImpl(); 133 ctx.put(CLIENT_ADDRESSING_PROPERTIES_OUTBOUND, maps); 134 RMPropertiesImpl rmps = new RMPropertiesImpl(); 135 SequenceType seq = control.createMock(SequenceType.class); 136 Identifier sid = control.createMock(Identifier.class); 137 rmps.setSequence(seq); 138 RMContextUtils.storeRMProperties(ctx, rmps, true); 139 SourceSequence ss = control.createMock(SourceSequence.class); 140 RMMessage msg = control.createMock(RMMessage.class); 141 AbstractClientBinding binding = control.createMock(AbstractClientBinding.class); 142 handler.getBinding(); 143 expectLastCall().andReturn(binding); 144 ObjectMessageContext clonedCtx = new ObjectMessageContextImpl(); 145 binding.createObjectContext(); 146 expectLastCall().andReturn(clonedCtx); 147 msg.getContext(); 148 expectLastCall().andReturn(ctx); 149 seq.getIdentifier(); 150 expectLastCall().andReturn(sid); 151 RMStore store = control.createMock(RMStore.class); 152 handler.getStore(); 153 expectLastCall().andReturn(store); 154 store.persistOutgoing(ss, msg); 155 expectLastCall(); 156 157 control.replay(); 158 s.addUnacknowledged(ss, msg); 159 control.verify(); 160 } 161 162 163 public void testSetAcknowledged() throws NoSuchMethodException , IOException { 164 RMStore store = control.createMock(RMStore.class); 165 expect(handler.getStore()).andReturn(store); 166 store.createSourceSequence(EasyMock.isA(SourceSequence.class)); 167 expectLastCall(); 168 169 control.replay(); 170 171 Identifier sid1 = s.generateSequenceIdentifier(); 172 Identifier sid2 = s.generateSequenceIdentifier(); 173 SourceSequence seq = new SourceSequence(sid1, null, null, BigInteger.TEN, true); 174 seq.setSource(s); 175 s.addSequence(seq); 176 177 SequenceAcknowledgement ack = RMUtils.getWSRMFactory().createSequenceAcknowledgement(); 178 ack.setIdentifier(sid1); 179 s.setAcknowledged(ack); 180 assertSame(ack, seq.getAcknowledgement()); 181 ack.setIdentifier(sid2); 182 s.setAcknowledged(ack); 183 184 control.verify(); 185 186 control.reset(); 187 188 ack = RMUtils.getWSRMFactory().createSequenceAcknowledgement(); 189 ack.setIdentifier(sid1); 190 AcknowledgementRange range = 191 RMUtils.getWSRMFactory().createSequenceAcknowledgementAcknowledgementRange(); 192 193 range.setLower(BigInteger.ONE); 194 range.setUpper(BigInteger.TEN); 195 ack.getAcknowledgementRange().add(range); 196 197 RMProxy proxy = control.createMock(RMProxy.class); 198 handler.getProxy(); 199 expectLastCall().andReturn(proxy); 200 proxy.terminateSequence(seq); 201 expectLastCall(); 202 203 control.replay(); 204 s.setAcknowledged(ack); 205 control.verify(); 206 207 control.reset(); 208 209 handler.getProxy(); 210 expectLastCall().andReturn(proxy); 211 proxy.terminateSequence(seq); 212 expectLastCall().andThrow(new IOException ("can't terminate sequence")); 213 214 control.replay(); 215 s.setAcknowledged(ack); 216 control.verify(); 217 218 } 219 220 public void testShutdown() { 221 s.shutdown(); 222 } 223 224 public void testRestore() { 225 RMStore store = control.createMock(RMStore.class); 226 EasyMock.expect(handler.getStore()).andReturn(store); 227 Configuration c = control.createMock(Configuration.class); 228 EasyMock.expect(handler.getConfiguration()).andReturn(c); 229 Configuration pc = control.createMock(Configuration.class); 230 EasyMock.expect(c.getParent()).andReturn(pc); 231 EasyMock.expect(pc.getId()).andReturn("endpoint"); 232 Identifier id = RMUtils.getWSRMFactory().createIdentifier(); 233 id.setValue("source1"); 234 SourceSequence ss = new SourceSequence(id); 235 Collection <RMSourceSequence> sss = new ArrayList <RMSourceSequence>(); 236 sss.add(ss); 237 EasyMock.expect(store.getSourceSequences("endpoint")).andReturn(sss); 238 EasyMock.expect(handler.getStore()).andReturn(store); 239 Collection <RMMessage> msgs = new ArrayList <RMMessage>(); 240 EasyMock.expect(store.getMessages(id, true)).andReturn(msgs); 241 control.replay(); 242 s.restore(); 243 assertEquals(1, s.getAllSequences().size()); 244 control.verify(); 245 } 246 247 private RMSource createSource(RMHandler h) { 248 bus = control.createMock(Bus.class); 249 h.getBus(); 250 expectLastCall().andReturn(bus); 251 lcm = control.createMock(BusLifeCycleManager.class); 252 bus.getLifeCycleManager(); 253 expectLastCall().andReturn(lcm); 254 cfg = control.createMock(Configuration.class); 255 h.getConfiguration(); 256 expectLastCall().andReturn(cfg); 257 cfg.getObject(RMAssertionType.class, "rmAssertion"); 258 expectLastCall().andReturn(null); 259 260 control.replay(); 261 262 RMSource src = new RMSource(h); 263 control.verify(); 264 control.reset(); 265 return src; 266 } 267 } 268 | Popular Tags |