package kvstore; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import static org.powermock.api.mockito.PowerMockito.whenNew; import java.io.*; import java.net.*; import java.util.Random; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; public class Utils { static void registerWithMaster(long slaveID, int port) throws IOException, KVException { String hostname = InetAddress.getLocalHost().getHostAddress(); Socket master = new Socket(hostname, 9090); KVMessage regMessage = new KVMessage( "register", slaveID + "@" + hostname+ ":" + port); regMessage.sendMessage(master); new KVMessage(master); master.close(); } static boolean containsMsg(Exception e, String msg) { return (((KVException) e).getKVMessage().getMessage()).toLowerCase() .contains(msg.toLowerCase()); } static String makeLongString(int n) { return new String(new char[n]).replace('\0', 'a'); } static String truncateString(String s) { if (s == null) { return "<null>"; } int n = s.length(); if (n > 20) { return String.format("%s...", s.substring(0, 20)); } else { return s; } } static void assertKVExceptionEquals(String expectedErrorMessage, KVException kve) { assertEquals(expectedErrorMessage, kve.getKVMessage().getMessage()); } static void assertKVExceptionEquals(String message, String expectedErrorMessage, KVException kve) { assertEquals(message, expectedErrorMessage, kve.getKVMessage().getMessage()); } /* Adapted from http://stackoverflow.com/a/41156 */ public static class RandomString { private static char[] symbols; static { StringBuilder tmp = new StringBuilder(); for (char ch = '0'; ch <= '9'; ++ch) tmp.append(ch); for (char ch = 'a'; ch <= 'z'; ++ch) tmp.append(ch); symbols = tmp.toString().toCharArray(); } private final Random random = new Random(); private final char[] buf; public RandomString(int maxLength) { if (maxLength < 0) throw new IllegalArgumentException("length < 0: " + maxLength); buf = new char[maxLength]; } public String nextString() { for (int idx = 0; idx < buf.length; ++idx) buf[idx] = symbols[random.nextInt(symbols.length)]; return new String(buf, 0, random.nextInt(buf.length)); } } public static class ErrorLogger { private String err = null; public ErrorLogger() { } public synchronized void logError(String err) { this.err = err; } public boolean allPass() { return err == null; } public String getError() { return err; } } @SuppressWarnings(value = "rawtypes") static void setupMockThreadPool() throws Exception { ThreadPool mockTP = mock(ThreadPool.class); doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); ((Runnable) args[0]).run(); return null; } }).when(mockTP).addJob((any(Runnable.class))); whenNew(ThreadPool.class).withArguments(anyInt()).thenReturn(mockTP); } static Socket setupReadFromFile(String filename) { Socket sock = mock(Socket.class); URL fileLocation = ClassLoader.getSystemResource(filename); try { doNothing().when(sock).setSoTimeout(anyInt()); when(sock.getInputStream()).thenReturn(new FileInputStream(fileLocation.getPath())); } catch (IOException e) { throw new RuntimeException(e); } return sock; } }