import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static play.test.Helpers.HTMLUNIT;
import static play.test.Helpers.POST;
import static play.test.Helpers.fakeApplication;
import static play.test.Helpers.running;
import static play.test.Helpers.testServer;
import java.io.File;
import java.util.HashMap;
import org.apache.commons.io.FileUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.baasbox.service.logging.BaasBoxLogger;
import play.Play;
import play.libs.F.Callback;
import play.test.TestBrowser;
import com.baasbox.BBConfiguration;
import com.baasbox.BBInternalConstants;
import com.baasbox.util.Util;
import core.AbstractRouteHeaderTest;
import core.TestConfig;
public class AdminImportTest extends AbstractRouteHeaderTest {
private static File correctZipFile;
@Override
public String getRouteAddress() {
return "/admin/db/import";
}
@Override
public String getMethod() {
return POST;
}
@Override
protected void assertContent(String s) {
// TODO Auto-generated method stub
}
@BeforeClass
public static void createCorrectFile() throws Exception{
running(getFakeApplication(), new Runnable() {
@Override
public void run() {
try{
String version = BBConfiguration.getApiVersion();
String fileContent = BBInternalConstants.IMPORT_MANIFEST_VERSION_PREFIX+version;
String classloaderPath = new File(Play.application().classloader().getResource(".").getFile()).getAbsolutePath();
File json = Play.application().getFile("test"+File.separator+"resources"+File.separator+"adminImportJson.json");
File manifest = new File(classloaderPath+File.separator+"target"+File.separator+"manifest.txt");
FileUtils.writeStringToFile(manifest, fileContent, false);
Util.createZipFile(classloaderPath+File.separator+"adminImportJson.zip",json,manifest);
//json.delete();
manifest.delete();
correctZipFile = new File(classloaderPath+File.separator+"adminImportJson.zip");
if(!correctZipFile.exists()){
fail();
}
}catch(Exception e){
fail();
}
}
});
}
/**
* Testing import functionality...while the db is in import mode
* the db shouldn't be accessible
* @throws Exception
*/
@Test
public void testPostImport() throws Exception
{
running
(
getTestServer(),
HTMLUNIT,
new Callback<TestBrowser>()
{
public void invoke(TestBrowser browser)
{
if (BaasBoxLogger.isDebugEnabled()) BaasBoxLogger.debug("Using zip file:"+correctZipFile.getAbsolutePath());
setHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
setHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
setMultipartFormData();
setAssetFile("/adminImportJson.zip", "application/zip");
int status = httpRequest("http://localhost:3333"+getRouteAddress(), getMethod(),new HashMap<String,String>());
assertTrue("Status should be 200. It is " + status,status==200);
}
}
);
}
@Test
public void testPostFailVersionImport() throws Exception
{
running
(
getTestServer(),
HTMLUNIT,
new Callback<TestBrowser>()
{
public void invoke(TestBrowser browser)
{
setHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
setHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
setMultipartFormData();
setAssetFile("/adminImportWrongVersionJson.zip", "application/zip");
int status = httpRequest("http://localhost:3333"+getRouteAddress(), getMethod(),new HashMap<String,String>());
assertTrue("Status should not be 200. It is " + status,status!=200);
}
}
);
}
@AfterClass
public static void removeGeneratedFile() throws Exception {
if(correctZipFile!=null && correctZipFile.exists()){
correctZipFile.delete();
}
}
}