package cc.blynk.integration.tcp; import cc.blynk.integration.IntegrationBase; import cc.blynk.integration.model.tcp.ClientPair; import cc.blynk.integration.model.tcp.TestHardClient; import cc.blynk.server.Holder; import cc.blynk.server.application.AppServer; import cc.blynk.server.core.BaseServer; import cc.blynk.server.core.model.AppName; import cc.blynk.server.core.model.device.Device; import cc.blynk.server.core.model.device.Status; import cc.blynk.server.core.protocol.model.messages.ResponseMessage; import cc.blynk.server.db.DBManager; import cc.blynk.server.db.model.FlashedToken; import cc.blynk.server.hardware.HardwareServer; import cc.blynk.utils.JsonParser; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; import java.util.UUID; import static cc.blynk.server.core.protocol.enums.Response.OK; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.*; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 2/2/2015. * */ @RunWith(MockitoJUnitRunner.class) public class AssignTokenTest extends IntegrationBase { private DBManager dbManager; private BaseServer appServer; private BaseServer hardwareServer; private ClientPair clientPair; @Before public void init() throws Exception { Holder holder = new Holder(properties, twitterWrapper, mailWrapper, gcmWrapper, smsWrapper, "db-test.properties"); hardwareServer = new HardwareServer(holder).start(); appServer = new AppServer(holder).start(); dbManager = holder.dbManager; this.clientPair = initAppAndHardPair(); assertNotNull(dbManager.getConnection()); dbManager.executeSQL("DELETE FROM flashed_tokens"); } @After public void shutdown() { this.appServer.close(); this.hardwareServer.close(); this.clientPair.stop(); dbManager.close(); } @Test public void testNoTokenExists() throws Exception { clientPair.appClient.send("assignToken 1\0" + "123"); verify(clientPair.appClient.responseMock, timeout(500)).channelRead(any(), eq(notAllowed(1))); } @Test public void testTokenActivate() throws Exception { FlashedToken[] list = new FlashedToken[1]; String token = UUID.randomUUID().toString().replace("-", ""); FlashedToken flashedToken = new FlashedToken("test@blynk.cc", token, AppName.BLYNK, 1, 0); list[0] = flashedToken; dbManager.insertFlashedTokens(list); clientPair.appClient.send("assignToken 1\0" + flashedToken.token); verify(clientPair.appClient.responseMock, timeout(500)).channelRead(any(), eq(ok(1))); clientPair.appClient.send("assignToken 1\0" + flashedToken.token); verify(clientPair.appClient.responseMock, timeout(500)).channelRead(any(), eq(notAllowed(2))); } @Test public void testCorrectToken() throws Exception { FlashedToken[] list = new FlashedToken[1]; String token = UUID.randomUUID().toString().replace("-", ""); FlashedToken flashedToken = new FlashedToken("test@blynk.cc", token, AppName.BLYNK, 1, 0); list[0] = flashedToken; dbManager.insertFlashedTokens(list); clientPair.appClient.send("assignToken 1\0" + flashedToken.token); verify(clientPair.appClient.responseMock, timeout(500)).channelRead(any(), eq(ok(1))); TestHardClient hardClient2 = new TestHardClient("localhost", tcpHardPort); hardClient2.start(); hardClient2.send("login " + flashedToken.token); verify(hardClient2.responseMock, timeout(500)).channelRead(any(), eq(new ResponseMessage(1, OK))); clientPair.appClient.send("getDevices 1"); String response = clientPair.appClient.getBody(3); Device[] devices = JsonParser.mapper.readValue(response, Device[].class); assertNotNull(devices); assertEquals(1, devices.length); assertEquals(flashedToken.token, devices[0].token); assertEquals(flashedToken.deviceId, devices[0].id); assertEquals(Status.ONLINE, devices[0].status); } }