package kvstore; import static autograder.TestUtils.kTimeoutQuick; import static kvstore.KVConstants.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.Socket; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import autograder.AGCategories.AGTestDetails; import autograder.AGCategories.AG_PROJ4_CODE; @RunWith(PowerMockRunner.class) @PrepareForTest(TPCMasterHandler.class) public class TPCMasterHandlerGetTest { private KVServer server; private TPCMasterHandler masterHandler; private Socket sock1; private Socket sock2; private Socket sock3; private static final String LOG_PATH = "TPCMasterHandlerTest.log"; @Before public void setupTPCMasterHandler() throws Exception { server = new KVServer(10, 10); TPCLog log = new TPCLog(LOG_PATH, server); Utils.setupMockThreadPool(); masterHandler = new TPCMasterHandler( 1L, server, log); } @After public void tearDown() { server = null; masterHandler = null; sock1 = null; sock2 = null; sock3 = null; File log = new File(LOG_PATH); if (log.exists() && !log.delete()) { // true iff delete failed. System.err.printf("deleting log-file at %s failed.\n", log.getAbsolutePath()); } } @Test(timeout = kTimeoutQuick) @Category(AG_PROJ4_CODE.class) @AGTestDetails(points = 1, desc = "Test if they can fail to get one value using Handler") public void testFailureGet() throws KVException { setupSocketSuccess(); InputStream getreqFile = getClass().getClassLoader().getResourceAsStream("getreq.txt"); ByteArrayOutputStream tempOut = new ByteArrayOutputStream(); try { doNothing().when(sock1).setSoTimeout(anyInt()); when(sock1.getInputStream()).thenReturn(getreqFile); when(sock1.getOutputStream()).thenReturn(tempOut); } catch (IOException e) { throw new RuntimeException(e); } masterHandler.handle(sock1); try { doNothing().when(sock3).setSoTimeout(anyInt()); when(sock3.getInputStream()).thenReturn(new ByteArrayInputStream(tempOut.toByteArray())); } catch (IOException e) { throw new RuntimeException(e); } KVMessage check = new KVMessage(sock3); assertEquals(RESP, check.getMsgType()); assertEquals(ERROR_NO_SUCH_KEY, check.getMessage()); } /* begin helper methods. */ private void setupSocketSuccess() { sock1 = mock(Socket.class); sock2 = mock(Socket.class); sock3 = mock(Socket.class); } }