package org.swisspush.redisques.lua;
import io.vertx.ext.unit.junit.VertxUnitRunner;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.swisspush.redisques.RedisEmbeddedConfiguration;
import redis.clients.jedis.Jedis;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
/**
* Abstract class containing common methods for LuaScript tests
*/
@RunWith(VertxUnitRunner.class)
public abstract class AbstractLuaScriptTest {
Jedis jedis = null;
@BeforeClass
public static void config() {
if(!RedisEmbeddedConfiguration.useExternalRedis()) {
RedisEmbeddedConfiguration.redisServer.start();
}
}
@AfterClass
public static void stopRedis() {
if(!RedisEmbeddedConfiguration.useExternalRedis()) {
RedisEmbeddedConfiguration.redisServer.stop();
}
}
@Before
public void connect() {
jedis = new Jedis("localhost", 6379, 5000);
}
@After
public void disconnect() {
jedis.flushAll();
jedis.close();
}
protected String readScript(String scriptFileName) {
return readScript(scriptFileName, false);
}
protected String readScript(String scriptFileName, boolean stripLogNotice) {
BufferedReader in = new BufferedReader(new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream(scriptFileName)));
StringBuilder sb;
try {
sb = new StringBuilder();
String line;
while ((line = in.readLine()) != null) {
if (stripLogNotice && line.contains("redis.LOG_NOTICE,")) {
continue;
}
sb.append(line + "\n");
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
in.close();
} catch (IOException e) {
// Ignore
}
}
return sb.toString();
}
protected Object evalScriptCheck(String lastCheckExecKey, int checkInterval) {
String checkScript = readScript("redisques_check.lua");
return jedis.eval(checkScript, new ArrayList() {
{
add(lastCheckExecKey);
}
}, new ArrayList() {
{
add(String.valueOf(System.currentTimeMillis()));
add(String.valueOf(checkInterval));
}
}
);
}
}