1 package org.iotivity.cloud.ciserver.resources.proxy.account;
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;
8 import java.util.HashMap;
9 import java.util.concurrent.CountDownLatch;
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;
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);
37 ConnectorPool connectorPool = null;
38 DeviceServerSystem deviceServerSystem = new DeviceServerSystem();
39 final CountDownLatch latch = new CountDownLatch(1);
41 IRequestChannel requestChannel;
44 AccountSession acSessionHandler = new AccountSession();
47 public void setUp() throws Exception {
50 Mockito.doReturn(di).when(mockDevice).getDeviceId();
51 Mockito.doReturn("mockDeviceUser").when(mockDevice).getUserId();
52 Mockito.doReturn("1689c70ffa245effc563017fee36d250").when(mockDevice)
54 MockitoAnnotations.initMocks(this);
55 deviceServerSystem.addResource(acSessionHandler);
56 Mockito.doAnswer(new Answer<Object>() {
58 public CoapRequest answer(InvocationOnMock invocation)
60 Object[] args = invocation.getArguments();
61 CoapRequest request = (CoapRequest) args[0];
65 "\t----------payload : " + request.getPayloadString());
67 "\t----------uripath : " + request.getUriPath());
69 "\t---------uriquery : " + request.getUriQuery());
72 }).when(requestChannel).sendRequest(Mockito.any(IRequest.class),
73 Mockito.any(CoapDevice.class));
77 public void testAccountSignInOnRequestReceived() throws Exception {
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);
87 public void testAccountResourceOnRequestReceived() throws Exception {
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
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"));
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));
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));
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)