package com.lordofthejars.nosqlunit.vault;
import com.bettercloud.vault.Vault;
import com.bettercloud.vault.VaultException;
import com.bettercloud.vault.api.Auth;
import com.bettercloud.vault.response.AuthResponse;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class DataLoaderTest {
@Mock
VaultConnection vaultConnection;
@Mock
Vault vault;
@Mock
Auth auth;
@Mock
AuthResponse response;
@Test
public void should_read_simple_secrets_definition() throws FileNotFoundException, VaultException {
// Given:
final DataLoader dataLoader = new DataLoader(vaultConnection);
// When:
dataLoader.load(new FileInputStream("src/test/resources/only_secrets.yml"));
// Then:
final Map<String, Object> fooSecret = new HashMap<>();
fooSecret.put("zip", "zap");
fooSecret.put("a", "b");
final Map<String, Object> barSecret = new HashMap<>();
barSecret.put("zap", "zip");
barSecret.put("b", "a");
verify(vaultConnection).writeLogical("secret/foo", fooSecret);
verify(vaultConnection).writeLogical("secret/bar", barSecret);
}
@Test
public void should_insert_tokens() throws FileNotFoundException, VaultException {
// Given:
when(vaultConnection.createToken()).thenReturn(new VaultConnection.TokenCreator(vault));
when(vault.auth()).thenReturn(auth);
when(response.getAuthClientToken()).thenReturn("aa-bb-cc-dd");
when(auth.createToken(anyObject(), anyObject(), anyObject(), anyObject(), anyObject(), anyObject(), anyObject(), anyObject()))
.thenReturn(response);
final DataLoader dataLoader = new DataLoader(vaultConnection);
// When:
dataLoader.load(new FileInputStream("src/test/resources/tokens_and_secrets.yml"));
// Then:
verify(vaultConnection, times(2)).createToken();
verify(vaultConnection, times(2)).updateToken("aa-bb-cc-dd");
verify(vaultConnection, times(2)).reconnectToOriginal();
final Map<String, Object> fooSecret = new HashMap<>();
fooSecret.put("zip", "zap");
fooSecret.put("a", "b");
verify(vaultConnection).writeLogical("secret/foo", fooSecret);
verify(vaultConnection).writeLogical("secret/bar", fooSecret);
}
}