package com.sromku.simple.storage;
import android.content.Context;
import android.test.InstrumentationTestCase;
import com.sromku.simple.storage.helpers.OrderType;
import java.io.File;
import java.util.List;
public class StorageTestCase extends InstrumentationTestCase {
private Storage mStorage;
private final static String DIR_NAME = "Storage Test";
private final static String FILE_NAME = "test.txt";
private final static String FILE_CONTENT = "some file content";
private final static String FILE_SECURE_NAME = "test_secure.txt";
private final static String FILE_SECURE_CONTENT = "something very secret";
@Override
protected void setUp() throws Exception {
Context context = getInstrumentation().getContext();
// set a storage
mStorage = null;
if (SimpleStorage.isExternalStorageWritable()) {
mStorage = SimpleStorage.getExternalStorage();
} else {
mStorage = SimpleStorage.getInternalStorage(context);
}
}
@Override
protected void tearDown() throws Exception {
// delete dir if exists
mStorage.deleteDirectory(DIR_NAME);
super.tearDown();
}
/**
* Create directory and check that the directory was created
*/
public void testCreateDirectory() {
// TEST: create dir
boolean wasCreated = mStorage.createDirectory(DIR_NAME, true);
assertEquals(true, wasCreated);
}
/**
* Create directory and check that the directory was created
*/
public void testCreateFile() {
// create dir
testCreateDirectory();
// TEST: create file
boolean wasCreated = mStorage.createFile(DIR_NAME, FILE_NAME, FILE_CONTENT);
assertEquals(true, wasCreated);
}
/**
* Create directory and check that the directory was created
*/
public void testReadFile() {
// create file with content
testCreateFile();
// TEST: read the content and test
String content = mStorage.readTextFile(DIR_NAME, FILE_NAME);
assertEquals(FILE_CONTENT, content);
}
/**
* Create directory and check that the directory was created
*/
public void testAppendFile() {
// create file with content
testCreateFile();
String newData = "new added data";
// TEST: append new data and test
mStorage.appendFile(DIR_NAME, FILE_NAME, newData);
String content = mStorage.readTextFile(DIR_NAME, FILE_NAME);
assertTrue(content.contains(newData));
}
/**
* Create file with encrypted data
*/
public void testEncryptContent() {
// create dir
testCreateDirectory();
// set encryption
final String IVX = "abcdefghijklmnop";
final String SECRET_KEY = "secret1234567890";
SimpleStorageConfiguration configuration = new SimpleStorageConfiguration.Builder().setEncryptContent(IVX, SECRET_KEY).build();
SimpleStorage.updateConfiguration(configuration);
// create file
mStorage.createFile(DIR_NAME, FILE_SECURE_NAME, FILE_SECURE_CONTENT);
// TEST: check the content of the file to be encrypted
String content = mStorage.readTextFile(DIR_NAME, FILE_SECURE_NAME);
assertEquals(FILE_SECURE_CONTENT, content);
// TEST: check after reseting the configuration to default
SimpleStorage.resetConfiguration();
content = mStorage.readTextFile(DIR_NAME, FILE_SECURE_NAME);
assertNotSame(FILE_SECURE_CONTENT, content);
}
public void testRename() {
// create file
testCreateFile();
// rename
File file = mStorage.getFile(DIR_NAME, FILE_NAME);
mStorage.rename(file, "new_" + FILE_NAME);
boolean isExist = mStorage.isFileExist(DIR_NAME, "new_" + FILE_NAME);
assertEquals(true, isExist);
}
public void testCopy() {
// create file
testCreateFile();
// copy file
File fileSource = mStorage.getFile(DIR_NAME, FILE_NAME);
mStorage.copy(fileSource, DIR_NAME, FILE_NAME + "C");
// validate existence
boolean isExist = mStorage.isFileExist(DIR_NAME, FILE_NAME + "C");
assertEquals(true, isExist);
// validate content
assertEquals(mStorage.readTextFile(DIR_NAME, FILE_NAME), mStorage.readTextFile(DIR_NAME, FILE_NAME + "C"));
}
public void testMove() {
// create file
testCreateFile();
// copy file
File fileSource = mStorage.getFile(DIR_NAME, FILE_NAME);
mStorage.move(fileSource, DIR_NAME, FILE_NAME + "C");
// validate existence destination
boolean isExist = mStorage.isFileExist(DIR_NAME, FILE_NAME + "C");
assertEquals(true, isExist);
// validate existence source (it shouldn't exist)
isExist = mStorage.isFileExist(DIR_NAME, FILE_NAME);
assertEquals(false, isExist);
}
public void testGetFilesByRegex() {
// create dir
testCreateDirectory();
// create 5 files
mStorage.createFile(DIR_NAME, "file1.txt", "");
mStorage.createFile(DIR_NAME, "file2.txt", "");
mStorage.createFile(DIR_NAME, "file3.log", "");
mStorage.createFile(DIR_NAME, "file4.log", "");
mStorage.createFile(DIR_NAME, "file5.txt", "");
// get files that ends with *.txt only. should be 3 of them
String TXT_PATTERN = "([^\\s]+(\\.(?i)(txt))$)";
List<File> filesTexts = mStorage.getFiles(DIR_NAME, TXT_PATTERN);
assertEquals(3, filesTexts.size());
// create more log files and check for *.log. should be 4 of them
String LOG_PATTERN = "([^\\s]+(\\.(?i)(log))$)";
mStorage.createFile(DIR_NAME, "file6.log", "");
mStorage.createFile(DIR_NAME, "file7.log", "");
List<File> filesLogs = mStorage.getFiles(DIR_NAME, LOG_PATTERN);
assertEquals(4, filesLogs.size());
// create dir and add files to dir. check again for *.log files. should
// be 4 of them.
mStorage.createDirectory(DIR_NAME + File.separator + "New Dir");
mStorage.createFile(DIR_NAME + File.separator + "New Dir", "file8.log", "");
mStorage.createFile(DIR_NAME + File.separator + "New Dir", "file9.log", "");
mStorage.createFile(DIR_NAME + File.separator + "New Dir", "file10.txt", "");
List<File> filesLogs2 = mStorage.getFiles(DIR_NAME, LOG_PATTERN);
assertEquals(4, filesLogs2.size());
// check inside new dir for *.log files. should be 2 of them
List<File> filesLogs3 = mStorage.getFiles(DIR_NAME + File.separator + "New Dir", LOG_PATTERN);
assertEquals(2, filesLogs3.size());
}
public void testGetFilesByOrder() {
// create dir
testCreateDirectory();
// TEST - Order by SIZE
mStorage.createFile(DIR_NAME, "file1.txt", "111222333");
mStorage.createFile(DIR_NAME, "file2.txt", "");
mStorage.createFile(DIR_NAME, "file3.log", "111");
List<File> filesSize = mStorage.getFiles(DIR_NAME, OrderType.SIZE);
assertEquals("file2.txt", filesSize.get(0).getName());
assertEquals("file3.log", filesSize.get(1).getName());
assertEquals("file1.txt", filesSize.get(2).getName());
// refresh directory
mStorage.deleteDirectory(DIR_NAME);
testCreateDirectory();
// TEST - Order by NAME
mStorage.createFile(DIR_NAME, "bbb.txt", "111222333");
mStorage.createFile(DIR_NAME, "ccc.txt", "");
mStorage.createFile(DIR_NAME, "aaa.log", "111");
List<File> filesName = mStorage.getFiles(DIR_NAME, OrderType.NAME);
assertEquals("aaa.log", filesName.get(0).getName());
assertEquals("bbb.txt", filesName.get(1).getName());
assertEquals("ccc.txt", filesName.get(2).getName());
// refresh directory
mStorage.deleteDirectory(DIR_NAME);
testCreateDirectory();
// TEST - Order by DATE
mStorage.createFile(DIR_NAME, "aaa.txt", "123456789");
sleep(1000);
mStorage.createFile(DIR_NAME, "bbb.txt", "123456789");
sleep(1000);
mStorage.createFile(DIR_NAME, "ccc.log", "123456789");
sleep(1000);
mStorage.appendFile(DIR_NAME, "bbb.txt", "some new content");
List<File> files = mStorage.getFiles(DIR_NAME, OrderType.DATE);
assertEquals("bbb.txt", files.get(0).getName());
assertEquals("ccc.log", files.get(1).getName());
assertEquals("aaa.txt", files.get(2).getName());
}
private void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}