package dbfit.util.crypto;
import static dbfit.util.crypto.JKSCryptoKeyStore.KS_NAME;
import java.io.File;
import java.io.IOException;
import static java.util.Arrays.asList;
import static dbfit.util.LangUtils.*;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mock;
import static org.mockito.Mockito.*;
import dbfit.util.MockitoTestBase;
public class CryptoAppTestBase extends MockitoTestBase {
@Mock protected CryptoService mockedCryptoService;
@Mock protected CryptoKeyStore mockedKS;
@Mock protected CryptoKeyStoreFactory mockedKSFactory;
@Mock protected CryptoServiceFactory mockedCryptoServiceFactory;
@Rule public TemporaryFolder tempKeyStoreFolder = new TemporaryFolder();
@Rule public TemporaryFolder tempKeyStoreFolder2 = new TemporaryFolder();
protected void setupMocks() throws IOException {
when(mockedKSFactory.newInstance()).thenReturn(mockedKS);
when(mockedKSFactory.newInstance(any(File.class))).thenReturn(mockedKS);
when(mockedCryptoServiceFactory.getCryptoService()).thenReturn(mockedCryptoService);
when(mockedCryptoServiceFactory.getCryptoService(any(CryptoKeyAccessor.class))).thenReturn(mockedCryptoService);
}
protected int execApp(String... args) throws Exception {
return createCryptoApp().execute(args);
}
protected int execApp(ArgList argList) throws Exception {
return createCryptoApp().execute(argList.args);
}
protected String getTempKeyStorePath() throws IOException {
return tempKeyStoreFolder.getRoot().getPath();
}
protected String getTempKeyStore2Path() throws IOException {
return tempKeyStoreFolder2.getRoot().getPath();
}
// Create a real (non-mocked app)
protected CryptoApp createCryptoApp() {
return new CryptoApp();
}
protected static class ArgList {
String[] args;
public ArgList(String[] args) { this.args = args; }
@Override public String toString() {
return join(asList(args), " ");
}
}
protected static ArgList args(String... params) {
return new ArgList(params);
}
// Used to init before @Parameters method
protected static TemporaryFolder initStaticTemp(boolean createFile) {
try {
TemporaryFolder tmp = new TemporaryFolder() { { before(); } };
if (createFile) {
tmp.newFile(KS_NAME);
}
return tmp;
} catch (Throwable t) {
throw new RuntimeException(t);
}
}
}