package de.pinyto.ctSESAM; import android.util.Base64; import junit.framework.TestCase; import org.json.JSONException; import org.json.JSONObject; import java.io.UnsupportedEncodingException; /** * Testing the setting container class. */ public class PasswordSettingTest extends TestCase { public void testUsername() { PasswordSetting s = new PasswordSetting("unit.test"); assertEquals("", s.getUsername()); s.setUsername("Hugo"); assertEquals("Hugo", s.getUsername()); } public void testLegacyPassword() { PasswordSetting s = new PasswordSetting("unit.test"); assertEquals("", s.getLegacyPassword()); s.setLegacyPassword("K6x/vyG9(p"); assertEquals("K6x/vyG9(p", s.getLegacyPassword()); } public void testExtraCharacterSet() { PasswordSetting s = new PasswordSetting("unit.test"); s.setExtraCharacterSet("&=Oo0wWsS$#uUvVzZ"); assertEquals("&=Oo0wWsS$#uUvVzZ", s.getExtraCharacterSetAsString()); } public void testGetCharacterSetAsString() { PasswordSetting s = new PasswordSetting("unit.test"); s.setTemplate("noxxxxxx"); assertEquals("0123456789#!\"~|@^°$%&/()[]{}=-_+*<>;:.", s.getCharacterSetAsString()); s.setTemplate("xxaAxxxxxx"); assertEquals("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", s.getCharacterSetAsString()); } public void testGetCharacterSet() { PasswordSetting s = new PasswordSetting("unit.test"); assertEquals("2", s.getCharacterSet().get(2)); s.setExtraCharacterSet("axFLp0"); s.setTemplate("oxxx"); assertEquals(6, s.getCharacterSet().size()); assertEquals("F", s.getCharacterSet().get(2)); assertEquals("0", s.getCharacterSet().get(5)); } public void testSalt() { PasswordSetting s = new PasswordSetting("unit.test"); byte[] expected = "somethingelse".getBytes(); s.setSalt(expected); byte[] actual = s.getSalt(); assertEquals(expected.length, actual.length); for (int i = 0; i < expected.length; i++) { assertEquals(expected[i], actual[i]); } } public void testSetCreationDate() { PasswordSetting s = new PasswordSetting("unit.test"); s.setModificationDate("1995-01-01T01:14:12"); s.setCreationDate("2001-01-01T02:14:12"); assertEquals("2001-01-01T02:14:12", s.getCreationDate()); assertEquals("2001-01-01T02:14:12", s.getModificationDate()); } public void testSetModificationDate() { PasswordSetting s = new PasswordSetting("unit.test"); s.setCreationDate("2007-01-01T02:14:12"); s.setModificationDate("2005-01-01T01:14:12"); assertEquals("2005-01-01T01:14:12", s.getCreationDate()); assertEquals("2005-01-01T01:14:12", s.getModificationDate()); } public void testNotes() { PasswordSetting s = new PasswordSetting("unit.test"); assertEquals("", s.getNotes()); s.setNotes("Beware of the password!"); assertEquals("Beware of the password!", s.getNotes()); } public void testTemplate() { PasswordSetting s = new PasswordSetting("unit.test"); assertEquals(10, s.getLength()); assertTrue(s.getTemplate().contains("a")); assertTrue(s.getTemplate().contains("A")); assertTrue(s.getTemplate().contains("n")); assertTrue(s.getTemplate().contains("o")); assertTrue(s.getTemplate().contains("x")); s.setTemplate("xan"); assertEquals(3, s.getLength()); assertTrue(s.getTemplate().contains("a")); assertFalse(s.getTemplate().contains("A")); assertTrue(s.getTemplate().contains("n")); assertFalse(s.getTemplate().contains("o")); assertTrue(s.getTemplate().contains("x")); assertEquals("xan", s.getTemplate()); assertEquals("3;xan", s.getFullTemplate()); s.setTemplate("3;xan"); assertEquals(3, s.getLength()); assertTrue(s.getTemplate().contains("a")); assertFalse(s.getTemplate().contains("A")); assertTrue(s.getTemplate().contains("n")); assertFalse(s.getTemplate().contains("o")); assertTrue(s.getTemplate().contains("x")); assertEquals("xan", s.getTemplate()); } public void testToJson() { PasswordSetting s = new PasswordSetting("unit.test"); s.setModificationDate("2005-01-01T01:14:12"); s.setCreationDate("2001-01-01T02:14:12"); s.setUsername("Hugo"); s.setLegacyPassword("Wamma"); s.setSalt("something".getBytes()); s.setIterations(213); s.setNotes("Some note."); try { assertTrue(s.toJSON().has("domain")); assertEquals("unit.test", s.toJSON().getString("domain")); assertTrue(s.toJSON().has("username")); assertEquals("Hugo", s.toJSON().getString("username")); assertTrue(s.toJSON().has("legacyPassword")); assertEquals("Wamma", s.toJSON().getString("legacyPassword")); assertTrue(s.toJSON().has("notes")); assertEquals("Some note.", s.toJSON().getString("notes")); assertTrue(s.toJSON().has("iterations")); assertEquals(213, s.toJSON().getInt("iterations")); assertTrue(s.toJSON().has("salt")); assertEquals( Base64.encodeToString("something".getBytes(), Base64.DEFAULT), s.toJSON().getString("salt")); assertTrue(s.toJSON().has("cDate")); assertEquals("2001-01-01T02:14:12", s.toJSON().getString("cDate")); assertTrue(s.toJSON().has("mDate")); assertEquals("2005-01-01T01:14:12", s.toJSON().getString("mDate")); assertTrue(s.toJSON().has("extras")); assertEquals("#!\"~|@^°$%&/()[]{}=-_+*<>;:.", s.toJSON().getString("extras")); assertTrue(s.toJSON().has("passwordTemplate")); assertEquals(10, s.toJSON().getString("passwordTemplate").length()); assertTrue(s.toJSON().getString("passwordTemplate").contains("a")); assertTrue(s.toJSON().getString("passwordTemplate").contains("A")); assertTrue(s.toJSON().getString("passwordTemplate").contains("n")); assertTrue(s.toJSON().getString("passwordTemplate").contains("o")); } catch (JSONException e) { assertTrue(false); } } public void testLoadFromJSON() { String json = "{\"domain\": \"unit.test\", \"username\": \"testilinius\", " + "\"notes\": \"interesting note\", \"legacyPassword\": \"rtSr?bS,mi\", " + "\"iterations\": 5341, " + "\"passwordTemplate\": \"xnxxAxaoxx\", \"salt\": \"ZmFzY2luYXRpbmc=\", " + "\"extras\": \"#&{}[]()%\", " + "\"cDate\": \"2001-01-01T02:14:12\", \"mDate\": \"2005-01-01T01:14:12\"}"; try { JSONObject data = new JSONObject(json); PasswordSetting s = new PasswordSetting(data.getString("domain")); s.loadFromJSON(data); assertEquals("unit.test", s.getDomain()); assertEquals("testilinius", s.getUsername()); assertEquals("interesting note", s.getNotes()); assertEquals("rtSr?bS,mi", s.getLegacyPassword()); assertEquals("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#&{}[]()%", s.getCharacterSetAsString()); assertEquals(5341, s.getIterations()); assertEquals(10, s.getLength()); assertEquals("xnxxAxaoxx", s.getTemplate()); assertEquals("#&{}[]()%", s.getExtraCharacterSetAsString()); byte[] expectedSalt; try { expectedSalt = "fascinating".getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { assertTrue(false); expectedSalt = "fascinating".getBytes(); } assertEquals(expectedSalt.length, s.getSalt().length); for (int i = 0; i < expectedSalt.length; i++) { assertEquals(expectedSalt[i], s.getSalt()[i]); } assertEquals("2001-01-01T02:14:12", s.getCreationDate()); assertEquals("2005-01-01T01:14:12", s.getModificationDate()); } catch (JSONException e) { assertTrue(false); } } public void testSetCharacterSetExtra() { PasswordSetting s = new PasswordSetting("unit.test"); s.setExtraCharacterSet("…ſ²³›ABC‹¢¥¥„“`´•"); s.setTemplate("xox"); assertEquals("…ſ²³›ABC‹¢¥¥„“`´•", s.getExtraCharacterSetAsString()); } }