@Test
  public void testClearPolicies() {
    DQPWorkContext message = new DQPWorkContext();
    message.setSession(Mockito.mock(SessionMetadata.class));
    Mockito.stub(message.getSession().getVdb()).toReturn(new VDBMetaData());
    Map<String, DataPolicy> map = message.getAllowedDataPolicies();
    map.put("role", Mockito.mock(DataPolicy.class)); // $NON-NLS-1$
    assertFalse(map.isEmpty());

    message.setSession(Mockito.mock(SessionMetadata.class));
    Mockito.stub(message.getSession().getVdb()).toReturn(new VDBMetaData());
    map = message.getAllowedDataPolicies();
    assertTrue(map.isEmpty());
  }
  @Test
  public void testAnyAuthenticated() {
    DQPWorkContext message = new DQPWorkContext();
    SessionMetadata mock = Mockito.mock(SessionMetadata.class);
    message.setSession(mock);
    VDBMetaData vdb = new VDBMetaData();
    DataPolicyMetadata dpm = new DataPolicyMetadata();
    dpm.setAnyAuthenticated(true);
    vdb.addDataPolicy(dpm);
    Mockito.stub(mock.getVdb()).toReturn(vdb);

    // unauthenticated
    Map<String, DataPolicy> map = message.getAllowedDataPolicies();
    assertEquals(0, map.size());

    // authenticated
    message = new DQPWorkContext();
    Mockito.stub(mock.getSubject()).toReturn(new Subject());
    message.setSession(mock);
    map = message.getAllowedDataPolicies();
    assertEquals(1, map.size());
  }
  @Test
  public void testRestoreSecurityContext() {
    final SecurityHelper sc =
        new SecurityHelper() {
          Object mycontext = null;

          @Override
          public Object getSecurityContext() {
            return this.mycontext;
          }

          @Override
          public void clearSecurityContext() {
            this.mycontext = null;
          }

          @Override
          public Object associateSecurityContext(Object context) {
            Object old = mycontext;
            this.mycontext = context;
            return old;
          }

          @Override
          public Subject getSubjectInContext(Object context) {
            return null;
          }

          @Override
          public Subject getSubjectInContext(String securityDomain) {
            return null;
          }

          @Override
          public Object authenticate(
              String securityDomain,
              String baseUserName,
              Credentials credentials,
              String applicationName)
              throws LoginException {
            return null;
          }

          @Override
          public GSSResult negotiateGssLogin(String securityDomain, byte[] serviceTicket)
              throws LoginException {
            return null;
          }
        };
    Object previousSC = "testSC";
    sc.associateSecurityContext(previousSC);

    DQPWorkContext message =
        new DQPWorkContext() {
          @Override
          public Subject getSubject() {
            return new Subject();
          }
        };
    message.setSecurityHelper(sc);
    message.setSession(Mockito.mock(SessionMetadata.class));
    final String currentSC = "teiid-security-context"; // $NON-NLS-1$
    Mockito.stub(message.getSession().getSecurityContext()).toReturn(currentSC);

    Runnable r =
        new Runnable() {
          @Override
          public void run() {
            assertEquals(currentSC, sc.getSecurityContext());
          }
        };

    message.runInContext(r);

    assertEquals(previousSC, sc.getSecurityContext());
  }