* Note: Alice and Bob are inverted in this test.
*/
public void testWaitingState() throws Exception
{
PublishSession publishSession = new PublishSession(getAlicePhone());
Request publish = publishSession.newPublish(getClass().getResourceAsStream("publish1.xml"), 60); // 1
publishSession.sendRequest(publish, SipResponse.OK); // 2
SubscribeSession presenceSession = new SubscribeSession(getBobPhone(), "presence");
Request subscribe = presenceSession.newInitialSubscribe(0, getAliceUri()); // 3
presenceSession.sendRequest(subscribe, Response.OK); // 4
ServerTransaction tx = presenceSession.waitForNotify(); // 5
System.out.println("5:\n" + tx.getRequest());
presenceSession.sendResponse(Response.OK, tx); // 6
Presence presence = getPresence(tx.getRequest());
assertEquals(Basic.CLOSED, presence.getTupleArray()[0].getStatus().getBasic());
SubscribeSession winfoSession = new SubscribeSession(getAlicePhone(), "presence.winfo"); // 7
subscribe = winfoSession.newInitialSubscribe(60, getAliceUri());
winfoSession.sendRequest(subscribe, Response.OK); // 8
tx = winfoSession.waitForNotify(); // 9
Request notify = tx.getRequest();
System.out.println("9:\n" +notify);
winfoSession.sendResponse(Response.OK, tx); // 10
SubscriptionStateHeader subState = (SubscriptionStateHeader) notify.getHeader(SubscriptionStateHeader.NAME);
assertEquals(SubscriptionStateHeader.ACTIVE.toLowerCase(), subState.getState().toLowerCase());
assertEquals(WatcherInfoEventPackage.NAME, ((EventHeader) notify.getHeader(EventHeader.NAME)).getEventType());
Watcherinfo watcherinfo = getWatcherinfo(notify);
assertEquals(0, watcherinfo.getVersion().intValue());
assertEquals(Watcherinfo.State.FULL, watcherinfo.getState());
assertEquals(1, watcherinfo.getWatcherListArray().length);
WatcherList watcherList = watcherinfo.getWatcherListArray(0);