package nl.minicom.gitolite.manager.models;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import nl.minicom.gitolite.manager.git.KeyGenerator;
import nl.minicom.gitolite.manager.models.Config;
import nl.minicom.gitolite.manager.models.KeyWriter;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import com.google.common.io.Files;
public class KeyWriterTest {
private static String KEY_CONTENTS;
@BeforeClass
public static void setKeyContents() throws NoSuchAlgorithmException, IOException {
KEY_CONTENTS = KeyGenerator.generateRandomPublicKey();
}
@Test(expected = NullPointerException.class)
public void testThatAddingKeysToConfigWhenConfigIsNullExceptionIsThrown() throws IOException {
KeyWriter.writeKeys(null, Files.createTempDir());
}
@Test(expected = NullPointerException.class)
public void testThatAddingKeysToConfigWhenKeyDirIsNullExceptionIsThrown() throws IOException {
KeyWriter.writeKeys(new Config(), null);
}
@Test(expected = IllegalArgumentException.class)
public void testThatAddingKeysToConfigWhenKeyDirIsNoDirectory() throws IOException {
File keyDir = Files.createTempDir();
File file = new File(keyDir, "test.pub");
file.createNewFile();
KeyWriter.writeKeys(new Config(), file);
}
@Test
public void testWritingSingleSimpleKeyToKeyDir() throws IOException {
File keyDir = Files.createTempDir();
Config config = new Config();
config.ensureUserExists("test-user").setKey("", KEY_CONTENTS );
KeyWriter.writeKeys(config, keyDir);
Assert.assertEquals(KEY_CONTENTS , readKey(keyDir, "test-user.pub"));
}
@Test
public void testWritingSingleKeyWithNameToKeyDir() throws IOException {
File keyDir = Files.createTempDir();
Config config = new Config();
config.ensureUserExists("test-user").setKey("iMac", KEY_CONTENTS );
KeyWriter.writeKeys(config, keyDir);
Assert.assertEquals(KEY_CONTENTS , readKey(keyDir, "test-user@iMac.pub"));
}
@Test
public void testWritingMultipleKeysForSingleUserToKeyDir() throws IOException {
File keyDir = Files.createTempDir();
Config config = new Config();
config.ensureUserExists("test-user").setKey("iMac", KEY_CONTENTS );
config.ensureUserExists("test-user").setKey("MacBook-Air", KEY_CONTENTS );
KeyWriter.writeKeys(config, keyDir);
Assert.assertEquals(KEY_CONTENTS , readKey(keyDir, "test-user@iMac.pub"));
Assert.assertEquals(KEY_CONTENTS , readKey(keyDir, "test-user@MacBook-Air.pub"));
}
@Test
public void testWritingMultipleKeysForMultipleUsersToKeyDir() throws IOException {
File keyDir = Files.createTempDir();
Config config = new Config();
config.ensureUserExists("test-user-1").setKey("iMac", KEY_CONTENTS );
config.ensureUserExists("test-user-1").setKey("MacBook-Air", KEY_CONTENTS );
config.ensureUserExists("test-user-2").setKey("iMac", KEY_CONTENTS );
config.ensureUserExists("test-user-2").setKey("MacBook-Air", KEY_CONTENTS );
KeyWriter.writeKeys(config, keyDir);
Assert.assertEquals(KEY_CONTENTS , readKey(keyDir, "test-user-1@iMac.pub"));
Assert.assertEquals(KEY_CONTENTS , readKey(keyDir, "test-user-1@MacBook-Air.pub"));
Assert.assertEquals(KEY_CONTENTS , readKey(keyDir, "test-user-2@iMac.pub"));
Assert.assertEquals(KEY_CONTENTS , readKey(keyDir, "test-user-2@MacBook-Air.pub"));
}
private String readKey(File keyDir, String keyFileName) throws IOException {
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new FileReader(new File(keyDir, keyFileName)));
String line;
while ((line = reader.readLine()) != null) {
if (builder.length() > 0) {
builder.append("\n");
}
builder.append(line);
}
reader.close();
return builder.toString();
}
}