Package com.opengamma.web.analytics.push

Source Code of com.opengamma.web.analytics.push.RestEntitySubscriptionTest

/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics.push;

import static org.testng.AssertJUnit.assertEquals;

import java.io.FileNotFoundException;
import java.io.IOException;

import org.eclipse.jetty.server.Server;
import org.json.JSONException;
import org.springframework.web.context.WebApplicationContext;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.threeten.bp.Instant;

import com.opengamma.core.change.ChangeType;
import com.opengamma.id.UniqueId;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.tuple.Pair;

/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class RestEntitySubscriptionTest {

  private final String _uidStr = "Tst~101";
  private final UniqueId _uid = UniqueId.parse(_uidStr);
  private final UniqueId _uidV1 = _uid.withVersion("1");

  private Server _server;
  private TestChangeManager _changeManager;
  private WebPushTestUtils _webPushTestUtils = new WebPushTestUtils();

  @BeforeClass
  public void createServer() throws Exception {
    Pair<Server,WebApplicationContext> serverAndContext = _webPushTestUtils.createJettyServer("classpath:/com/opengamma/web/analytics/push/rest-subscription-test.xml");
    _server = serverAndContext.getFirst();
    WebApplicationContext context = serverAndContext.getSecond();
    _changeManager = context.getBean("changeManager", TestChangeManager.class);
  }

  @AfterClass
  public void tearDown() throws Exception {
    _server.stop();
  }

  @Test
  public void entitySubscription() throws IOException, JSONException {
    String clientId = _webPushTestUtils.handshake();
    String restUrl = "/jax/test/" + _uidStr;
    // this REST request should set up a subscription for object ID Tst~101
    _webPushTestUtils.readFromPath(restUrl, clientId);
    // send a change event
    _changeManager.entityChanged(ChangeType.CHANGED, _uidV1.getObjectId(), null, null, Instant.now());
    // connect to the long-polling URL to receive notification of the change
    String json = _webPushTestUtils.readFromPath("/updates/" + clientId);
    WebPushTestUtils.checkJsonResults(json, restUrl);
  }

  @Test
  public void subResourceSubscription() throws IOException, JSONException {
    String clientId = _webPushTestUtils.handshake();
    String restUrl = "/jax/testsub/" + _uidStr;
    _webPushTestUtils.readFromPath(restUrl, clientId);
    _changeManager.entityChanged(ChangeType.CHANGED, _uidV1.getObjectId(), null, null, Instant.now());
    String json = _webPushTestUtils.readFromPath("/updates/" + clientId);
    WebPushTestUtils.checkJsonResults(json, restUrl);
  }

  @Test
  public void multipleEntitySubscription() throws IOException, JSONException {
    String clientId = _webPushTestUtils.handshake();
    String restUrl1 = "/jax/test/" + _uidStr;
    String uid2Str = "Tst~102";
    UniqueId uid2 = UniqueId.parse(uid2Str);
    UniqueId uid2V1 = uid2.withVersion("1");
    String restUrl2 = "/jax/test/" + uid2Str;
    _webPushTestUtils.readFromPath(restUrl1, clientId);
    _webPushTestUtils.readFromPath(restUrl2, clientId);
    _changeManager.entityChanged(ChangeType.CHANGED, _uidV1.getObjectId(), null, null, Instant.now());
    _changeManager.entityChanged(ChangeType.CHANGED, uid2V1.getObjectId(), null, null, Instant.now());
    String json = _webPushTestUtils.readFromPath("/updates/" + clientId);
    WebPushTestUtils.checkJsonResults(json, restUrl1, restUrl2);
  }

  @Test
  public void noClientIdNoSubscription() throws IOException {
    String clientId = _webPushTestUtils.handshake();
    String restUrl = "/jax/test/" + _uidStr;
    // this REST request shouldn't set up a subscription because there is no client ID so the server doesn't know
    // where to send the update
    _webPushTestUtils.readFromPath(restUrl);
    // send a change event that we should never see
    _changeManager.entityChanged(ChangeType.CHANGED, _uidV1.getObjectId(), null, null, Instant.now());
    String result = _webPushTestUtils.readFromPath("/updates/" + clientId);
    assertEquals("", result);
  }

  @Test(expectedExceptions = FileNotFoundException.class)
  public void invalidClientId() throws IOException {
    String restUrl = "/jax/test/" + _uidStr;
    // this REST request shouldn't set up a subscription because the client ID doesn't match an existing client connection
    _webPushTestUtils.readFromPath(restUrl);
    // send a change event that we should never see
    _changeManager.entityChanged(ChangeType.CHANGED, _uidV1.getObjectId(), null, null, Instant.now());
    // will throw an exception because the URL is unknown
    _webPushTestUtils.readFromPath("/updates/abc");
  }

  // TODO confirm the correct behaviour - presumably the REST request would fail so maybe the filter should look at the response status
  // what is the response status in that case?
  /*@Test
  public void invalidUniqueId() {
  }*/
TOP

Related Classes of com.opengamma.web.analytics.push.RestEntitySubscriptionTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.