CI unit test included
[platform/upstream/iotivity.git] / cloud / interface / src / test / java / org / iotivity / cloud / ciserver / resources / proxy / account / AccountSessionTest.java
1 package org.iotivity.cloud.ciserver.resources.proxy.account;
2
3 import static java.util.concurrent.TimeUnit.SECONDS;
4 import static org.junit.Assert.assertEquals;
5 import static org.junit.Assert.assertTrue;
6 import static org.mockito.Mockito.mock;
7
8 import java.util.HashMap;
9 import java.util.concurrent.CountDownLatch;
10
11 import org.iotivity.cloud.base.connector.ConnectorPool;
12 import org.iotivity.cloud.base.device.CoapDevice;
13 import org.iotivity.cloud.base.device.IRequestChannel;
14 import org.iotivity.cloud.base.protocols.IRequest;
15 import org.iotivity.cloud.base.protocols.IResponse;
16 import org.iotivity.cloud.base.protocols.MessageBuilder;
17 import org.iotivity.cloud.base.protocols.coap.CoapRequest;
18 import org.iotivity.cloud.base.protocols.enums.ContentFormat;
19 import org.iotivity.cloud.base.protocols.enums.RequestMethod;
20 import org.iotivity.cloud.ciserver.DeviceServerSystem;
21 import org.iotivity.cloud.util.Cbor;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.mockito.InjectMocks;
25 import org.mockito.Mock;
26 import org.mockito.Mockito;
27 import org.mockito.MockitoAnnotations;
28 import org.mockito.invocation.InvocationOnMock;
29 import org.mockito.stubbing.Answer;
30
31 public class AccountSessionTest {
32     private String             di                 = "B371C481-38E6-4D47-8320-7688D8A5B58C";
33     public static final String SESSION_URI        = "/.well-known/ocf/account/session";
34     private CoapDevice         mockDevice         = mock(CoapDevice.class);
35     IResponse                  res                = null;
36     IRequest                   req                = null;
37     ConnectorPool              connectorPool      = null;
38     DeviceServerSystem         deviceServerSystem = new DeviceServerSystem();
39     final CountDownLatch       latch              = new CountDownLatch(1);
40     @Mock
41     IRequestChannel            requestChannel;
42
43     @InjectMocks
44     AccountSession             acSessionHandler   = new AccountSession();
45
46     @Before
47     public void setUp() throws Exception {
48         res = null;
49         req = null;
50         Mockito.doReturn(di).when(mockDevice).getDeviceId();
51         Mockito.doReturn("mockDeviceUser").when(mockDevice).getUserId();
52         Mockito.doReturn("1689c70ffa245effc563017fee36d250").when(mockDevice)
53                 .getAccessToken();
54         MockitoAnnotations.initMocks(this);
55         deviceServerSystem.addResource(acSessionHandler);
56         Mockito.doAnswer(new Answer<Object>() {
57             @Override
58             public CoapRequest answer(InvocationOnMock invocation)
59                     throws Throwable {
60                 Object[] args = invocation.getArguments();
61                 CoapRequest request = (CoapRequest) args[0];
62                 req = request;
63                 latch.countDown();
64                 System.out.println(
65                         "\t----------payload : " + request.getPayloadString());
66                 System.out.println(
67                         "\t----------uripath : " + request.getUriPath());
68                 System.out.println(
69                         "\t---------uriquery : " + request.getUriQuery());
70                 return null;
71             }
72         }).when(requestChannel).sendRequest(Mockito.any(IRequest.class),
73                 Mockito.any(CoapDevice.class));
74     }
75
76     @Test
77     public void testAccountSignInOnRequestReceived() throws Exception {
78         System.out.println(
79                 "\t--------------OnRequestReceived Sign In Test------------");
80         IRequest request = makeSignInRequest();
81         deviceServerSystem.onRequestReceived(mockDevice, request);
82         assertTrue(latch.await(1L, SECONDS));
83         assertEquals(request, request);
84     }
85
86     @Test
87     public void testAccountResourceOnRequestReceived() throws Exception {
88         System.out.println(
89                 "\t--------------OnRequestReceived Sign Out Test------------");
90         // sign up request from the client
91         IRequest request = makeSignOutRequest();
92         deviceServerSystem.onRequestReceived(mockDevice, request);
93         // assertion : request msg to the AS is identical to the request msg
94         // from the client
95         assertTrue(latch.await(1L, SECONDS));
96         assertTrue(hashmapCheck(req, "uid"));
97         assertTrue(hashmapCheck(req, "di"));
98         assertTrue(hashmapCheck(req, "accesstoken"));
99         assertTrue(hashmapCheck(req, "login"));
100     }
101
102     private IRequest makeSignInRequest() {
103         Cbor<HashMap<String, Object>> cbor = new Cbor<HashMap<String, Object>>();
104         IRequest request = null;
105         HashMap<String, Object> payloadData = new HashMap<>();
106         payloadData.put("uid", "u0001");
107         payloadData.put("di", di);
108         payloadData.put("accesstoken", "1689c70ffa245effc563017fee36d250");
109         payloadData.put("login", true);
110         request = MessageBuilder.createRequest(RequestMethod.POST, SESSION_URI,
111                 null, ContentFormat.APPLICATION_CBOR,
112                 cbor.encodingPayloadToCbor(payloadData));
113         return request;
114     }
115
116     private IRequest makeSignOutRequest() {
117         Cbor<HashMap<String, Object>> cbor = new Cbor<HashMap<String, Object>>();
118         IRequest request = null;
119         HashMap<String, Object> payloadData = new HashMap<>();
120         payloadData.put("login", false);
121         request = MessageBuilder.createRequest(RequestMethod.POST, SESSION_URI,
122                 null, ContentFormat.APPLICATION_CBOR,
123                 cbor.encodingPayloadToCbor(payloadData));
124         return request;
125     }
126
127     private boolean hashmapCheck(IRequest request, String propertyName) {
128         Cbor<HashMap<String, Object>> mCbor = new Cbor<>();
129         HashMap<String, Object> payloadData = mCbor
130                 .parsePayloadFromCbor(request.getPayload(), HashMap.class);
131         if (payloadData.get(propertyName) != null)
132             return true;
133         else
134             return false;
135     }
136 }