/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.tuscany.sca.itest.conversational; import org.apache.tuscany.sca.host.embedded.SCADomain; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class ConversationLifetimeTestCase { private SCADomain domain; @Before public void setUp() throws Exception { domain = SCADomain.newInstance("conversationLifetime.composite"); } @After public void tearDown() throws Exception { if (domain != null) { domain.close(); } } /** * Following a clarification re. the wording of the Java Common Annotations and APIs 1.00 Specification * (see TUSCANY-2055) the following is accepted to be the intended operation * * Whether the conversation ID is chosen by the user or is generated by the system, the client * may access the conversation ID by calling getConversationID() on the current conversation object. * * ServiceReference.getConversationID() - Returns the id supplied by the user that will be associated with * future conversations initiated through this reference, or null if no ID has been set by the user. * * ServiceReference.setConversationID(Object conversationId) - Set an ID, supplied by the user, to associate with any future conversation * started through this reference. If the value supplied is null then the id will be generated * by the implementation. Throws an IllegalStateException if a conversation is currently * associated with this reference. * */ /** * Verify that ServiceReference.getConversationID() returns null before a conversation * ID has been set manually. */ @Test public void getConversationID() { CService service = domain.getService(CService.class, "ConversationalCComponent"); service.getState(); Assert.assertNull(service.getConversationID()); } /** * Verify that ServiceReference.getConversationID() returns any value previous set through the * setConversationID() API. */ @Test public void getConversationID2() { String userProvidedID = "A conversation ID"; CService service = domain.getService(CService.class, "ConversationalCComponent"); service.setConversationID(userProvidedID); service.getState(); Assert.assertEquals(service.getConversationID(), userProvidedID); } /** * Whether the conversation ID is chosen by the user or is generated by the system, the client * may access the conversation ID by calling getConversationID() on the current conversation object. * Here test the manually set conversationID */ @Test public void getConversationID3() { String userProvidedID = "A conversation ID"; CService service = domain.getService(CService.class, "ConversationalCComponent"); service.setConversationID(userProvidedID); service.getState(); Assert.assertEquals(service.getConversationObjectConversationId(), userProvidedID); } /** * Whether the conversation ID is chosen by the user or is generated by the system, the client * may access the conversation ID by calling getConversationID() on the current conversation object. * Here test the auto generated conversationId */ @Test public void getConversationID4() { CService service = domain.getService(CService.class, "ConversationalCComponent"); service.getState(); Assert.assertNotNull(service.getConversationObjectConversationId()); } /** * Java Common Annotations and APIs 1.00 Specification line 494-495 Verify: * If a method is invoked on a service reference after an * "@EndsConversation" method has been called then a new conversation will * automatically be started. */ @Test public void implicitStartNewConversationAfterEnd() { CService service = domain.getService(CService.class, "ConversationalCComponent"); service.getState(); Object firstID = service.getConversationObjectConversationId(); service.endConversationViaAnnotatedMethod(); service.getState(); Assert.assertNotSame(firstID, service.getConversationObjectConversationId()); } /** * Java Common Annotations and APIs 1.00 Specification line 495-495 Verify: If a * method is invoked on a service reference after an "@EndsConversation" * method has been called then a new conversation will automatically be * started. Note: Uses Conversation.end() rather than "@EndsConversation" */ @Test public void implicitStartNewConversationAfterEnd2() { CService service = domain.getService(CService.class, "ConversationalCComponent"); service.getState(); Object firstID = service.getConversationObjectConversationId(); service.endConversation(); service.getState(); Assert.assertNotSame(firstID, service.getConversationObjectConversationId()); } /** * Java Common Annotations and APIs 1.00 Specification line 495-497 Verify: * If ServiceReference.getConversationID() is called after the * "@EndsConversation" method is called, but before the next conversation * has been started, it will return null. */ @Test public void nullConversationIDAfterEndConversation() { CService service = domain.getService(CService.class, "ConversationalCComponent"); service.getState(); service.endConversationViaAnnotatedMethod(); Assert.assertNull(service.getConversationObjectConversationId()); } /** * Java Common Annotations and APIs 1.00 Specification line 495-497 Verify: * If ServiceReference.getConversationID() is called after the * "@EndsConversation" method is called, but before the next conversation * has been started, it will return null. Note: Uses explicit set of Conversation ID */ @Test public void nullConversationIDAfterEndConversation1a() { CService service = domain.getService(CService.class, "ConversationalCComponent"); service.setConversationID("User provided ID"); service.getState(); service.endConversationViaAnnotatedMethod(); Assert.assertNull(service.getConversationObjectConversationId()); } /** * Java Common Annotations and APIs 1.00 Specification line 495-497 Verify: If * ServiceReference.getConversationID() is called after the * "@EndsConversationmethod" is called, but before the next conversation has * been started, it will return null. Note: Uses Conversation.end() rather * than "@EndsConversation" */ @Test public void nullConversationIDAfterEndConversation2() { CService service = domain.getService(CService.class, "ConversationalCComponent"); service.getState(); service.endConversation(); Assert.assertNull(service.getConversationObjectConversationId()); } /** * Java Common Annotations and APIs 1.00 Specification line 495-497 Verify: If * ServiceReference.getConversationID() is called after the * "@EndsConversationmethod" is called, but before the next conversation has * been started, it will return null. Note: Uses Conversation.end() rather * than "@EndsConversation". Note 2: Uses explicit set of Conversation ID */ @Test public void nullConversationIDAfterEndConversation2a() { CService service = domain.getService(CService.class, "ConversationalCComponent"); service.setConversationID("User provided ID"); service.getState(); service.endConversation(); Assert.assertNull(service.getConversationObjectConversationId()); } }