@Test public void recycleBinEntries() { database.enableRecycleBin(false); assertFalse(database.isRecycleBinEnabled()); assertNull(database.getRecycleBin()); database.enableRecycleBin(true); assertTrue(database.isRecycleBinEnabled()); G recycleBin = database.getRecycleBin(); assertNotNull(recycleBin); E entry = database.newEntry(); assertEquals(entry, database.getRootGroup().addEntry(entry)); assertEquals(1, database.getRootGroup().getEntriesCount()); assertTrue(database.deleteEntry(entry.getUuid())); assertEquals(0, database.getRootGroup().getEntriesCount()); assertEquals(1, recycleBin.getEntriesCount()); database.enableRecycleBin(false); assertFalse(database.isRecycleBinEnabled()); entry = database.newEntry(); assertEquals(entry, database.getRootGroup().addEntry(entry)); assertEquals(1, database.getRootGroup().getEntriesCount()); assertTrue(database.deleteEntry(entry.getUuid())); assertEquals(0, database.getRootGroup().getEntriesCount()); assertEquals(1, recycleBin.getEntriesCount()); database.emptyRecycleBin(); assertEquals(0, recycleBin.getEntriesCount()); }
/** * Group by title */ public G groupByTitle(D database) { List<? extends E> entries = database.findEntries(new Entry.Matcher() { @Override public boolean matches(Entry entry) { return entry.getProperty(Entry.STANDARD_PROPERTY_NAME_TITLE).toLowerCase().contains("findme!"); } }); // create a new group using DB factory method G newParent = database.newGroup("Found entries"); // iterate over the found entries for (E entry : entries) { // copy the entry using DB factory so it remains where it was found as well as being in new group E copy = database.newEntry(entry); // add new entry to new group newParent.addEntry(copy); } return newParent; }
@Override public String getId() { return database.getName() + " (" + database.getRootGroup().getUuid().toString() + ")"; }
private D createNewDatabase() throws IOException { D database = getDatabase(); for (Integer g = 0; g < 5; g++){ G group = database.getRootGroup().addGroup(database.newGroup(g.toString())); for (int e = 0; e <= g; e++) { group.addEntry(entryFactory(database, g.toString(), e)); } } return database; }
@Test public void testNewDatabase() throws IOException { D database = getDatabase(); G root = database.getRootGroup(); Assert.assertTrue(root.isRootGroup()); assertEquals(0, root.getGroups().size()); assertEquals(0, root.getEntries().size()); Assert.assertTrue(database.shouldProtect("Password")); Assert.assertFalse(database.shouldProtect("Title")); Assert.assertFalse(database.shouldProtect("Bogus")); assertEquals("New Database", database.getName()); database.setName("Modified Database"); assertEquals("Modified Database", database.getName()); assertEquals("New Database created by KeePassJava2", database.getDescription()); database.setDescription("Test Database"); assertEquals("Test Database", database.getDescription()); G group1 = database.newGroup("Group 1"); UUID newGroupUUID = group1.getUuid(); G group2 = database.newGroup(); group2.setName("Group 2"); group1.addGroup(group2); E entry1 = database.newEntry(); entry1.setTitle("A new entry"); assertEquals("A new entry", entry1.getTitle());
public void process(final Message.Request r, Message.Response resp) { Entry entry = null; if (r.Uuid != null) { List entries = database.findEntries(new Entry.Matcher() { @Override public boolean matches(Entry entry) { entry = database.newEntry(); entry.setTitle("New Entry " + format.format(new Date())); entry.setNotes("Created automatically"); entry.setProperty("SubmitUrl", r.SubmitUrl); database.getRootGroup().addEntry(entry); try { database.save(adaptor.getCredentials(), adaptor.getOutputStream()); } catch (IOException e) { throw new IllegalStateException(e);
@Test public void recycleBinGroups() { database.enableRecycleBin(true); assertTrue(database.isRecycleBinEnabled()); G recycleBin = database.getRecycleBin(); assertNotNull(recycleBin); G group= database.newGroup(); assertEquals(group, database.getRootGroup().addGroup(group)); assertEquals(2, database.getRootGroup().getGroupsCount()); assertTrue(database.deleteGroup(group.getUuid())); assertEquals(1, database.getRootGroup().getGroupsCount()); assertEquals(1, recycleBin.getGroupsCount()); database.enableRecycleBin(false); assertFalse(database.isRecycleBinEnabled()); group = database.newGroup(); assertEquals(group, database.getRootGroup().addGroup(group)); assertEquals(2, database.getRootGroup().getGroupsCount()); assertTrue(database.deleteGroup(group.getUuid())); assertEquals(1, database.getRootGroup().getGroupsCount()); assertEquals(1, recycleBin.getGroupsCount()); database.emptyRecycleBin(); assertEquals(0, recycleBin.getGroupsCount()); }
@Test public void testAddRemoveEntry() { E e1 = database.getRootGroup().addEntry(database.newEntry()); e1.setTitle("entry1"); List<? extends E> l1 = database.findEntries("entry1"); Assert.assertTrue(l1.size() == 1); E e12 = database.getRootGroup().addEntry(database.newEntry("entry12")); List<? extends E> l2 = database.findEntries("entry1"); Assert.assertTrue(l2.size() == 2); // show that the entries are different Assert.assertFalse(l2.get(0).equals(l2.get(1))); // show that the list is a copy l2.clear(); Assert.assertTrue(database.findEntries("entry1").size() == 2); // show that we get an equivalent entry when we remove to when we inserted Entry e12b = database.getRootGroup().removeEntry(e12); Assert.assertTrue(e12b.equals(e12)); // has been unhooked from parent Assert.assertTrue(e12.getParent() == null); Assert.assertTrue(database.findEntries("entry1").size() == 1); }
/** * Load KDB and save as KDBX */ public void loadKdb() throws IOException { InputStream inputStream = getClass().getClassLoader().getResourceAsStream("test123.kdb"); // password credentials Credentials credentials = new KdbCredentials.Password("123".getBytes()); // load KdbDatabase KdbDatabase database = KdbDatabase.load(credentials, inputStream); // visit all groups and entries and list them to console database.visit(new Visitor.Print()); // create a KDBX (database D kdbxDatabse = getDatabase(); kdbxDatabse.setName("New Database"); kdbxDatabse.setDescription("Migration of KDB Database to KDBX Database"); // deep copy from group (not including source group, KDB database has simulated root) kdbxDatabse.getRootGroup().copy(database.getRootGroup()); // save it try (FileOutputStream f = new FileOutputStream("testOutput/migration.kdbx")) { kdbxDatabse.save(new KdbxCreds("123".getBytes()), f); } } }
public void saveKdbx() throws IOException { // create an empty database D database = getDatabase(); // add some groups and entries for (Integer g = 0; g < 5; g++) { G group = database.getRootGroup().addGroup(database.newGroup(g.toString())); for (int e = 0; e <= g; e++) { // entry factory is a local helper to populate an entry group.addEntry(entryFactory(database, g.toString(), e)); } } // save to a file with password "123" try (FileOutputStream outputStream = new FileOutputStream("testOutput/test.kdbx")) { database.save(new KdbxCreds("123".getBytes()), outputStream); } }
@Test public void testCopy() throws IOException { E entry1 = database.newEntry(); entry1.setTitle("Entry"); entry1.setUsername("Username"); entry1.setUrl("http://dont.follow.me"); entry1.setNotes("Notes"); entry1.setIcon(database.newIcon(2)); E entry2 = database2.newEntry(entry1); assertNotEquals(entry1.getUuid(), entry2.getUuid()); G group1 = database.newGroup(); group1.setName("Group"); group1.setIcon(database.newIcon(3)); G group2 = database2.newGroup(group1); assertEquals(group1.getName(), group2.getName()); assertEquals(group1.getIcon(), group2.getIcon());
@Override public void copy(Group<? extends Database, ? extends Group, ? extends Entry, ? extends Icon> parent) { for (Group<?,?,?,?> child : parent.getGroups()) { G addedGroup = addGroup(this.getDatabase().newGroup(child)); addedGroup.copy(child); } for (Entry entry : parent.getEntries()) { addEntry(this.getDatabase().newEntry(entry)); } }
/** * Save KDBX */ private E entryFactory(D database, String s, int e) { return database.newEntry(String.format("Group %s Entry %d", s, e)); }
@Test public void getBinaryProperty() throws Exception { Entry entry = database.findEntries("Test attachment").get(0); byte [] letterJ = entry.getBinaryProperty("letter J.jpeg"); InputStream testfile = getClass().getClassLoader().getResourceAsStream("letter J.jpeg"); byte [] original = ByteStreams.toByteArray(testfile); Assert.assertArrayEquals(original, letterJ); }
@Test public void testSetFields () { E e1 = database.newEntry("Entry 1"); e1.setNotes("this looks a little like Entry 2"); Assert.assertTrue(e1.getNotes().equals("this looks a little like Entry 2")); Assert.assertFalse(e1.matchTitle("doggy")); I ic1 = database.newIcon(27); e1.setIcon(ic1); Assert.assertTrue(e1.getIcon().equals(ic1)); } catch (UnsupportedOperationException e) { assertTrue(!database.supportsNonStandardPropertyNames()); assertArrayEquals(e1.getPropertyNames().toArray(), Entry.STANDARD_PROPERTY_NAMES.toArray());
database.visit(new Visitor.Print()); List<? extends E> anything = database.findEntries(""); Assert.assertTrue(10 <= anything.size()); List<? extends E> tests = database.findEntries("test"); for (Entry tes: tests) { System.out.println(tes.getTitle()); List<? extends E> passwords = database.findEntries("password"); Assert.assertEquals(4, passwords.size()); for (Entry passwordEntry : passwords) { List<? extends E> entries = database.findEntries(new Entry.Matcher() { @Override public boolean matches(Entry entry) {
@Test public void checkAddChangeRemoveProperty() { // only applies to databases that support arbitrary properties E entry = database.newEntry(); assertEquals(Entry.STANDARD_PROPERTY_NAMES.size(), entry.getPropertyNames().size()); try { entry.setProperty("test", "test1"); } catch (UnsupportedOperationException e) { if (!database.supportsNonStandardPropertyNames()) { return; } fail("Database must report that it doesn't support non standrad properties"); } assertEquals("test1", entry.getProperty("test")); entry.setProperty("test", "test2"); assertEquals("test2", entry.getProperty("test")); assertTrue(entry.removeProperty("test")); assertFalse(entry.removeProperty("test")); assertFalse(entry.removeProperty("test-test")); assertEquals(Entry.STANDARD_PROPERTY_NAMES.size(), entry.getPropertyNames().size()); try { entry.removeProperty(Entry.STANDARD_PROPERTY_NAME_USER_NAME); fail("Should not be able to remove standard property"); } catch (IllegalArgumentException ignore) { // ignore as expected } }
@Test public void setBinaryProperty() throws Exception { InputStream testfile = getClass().getClassLoader().getResourceAsStream("letter L.jpeg"); byte [] original = ByteStreams.toByteArray(testfile); Entry entry = database.findEntries("Test attachment").get(0); entry.setBinaryProperty("letter L.jpeg", original); byte [] letterL = entry.getBinaryProperty("letter L.jpeg"); Assert.assertArrayEquals(original, letterL); assertArrayEquals(new String[] {"letter J.jpeg", "letter L.jpeg"}, entry.getBinaryPropertyNames().toArray()); Assert.assertTrue(database.isDirty()); }
Assert.assertTrue(output.isDirty()); assertEquals(5, output.getRootGroup().getGroupsCount()); Assert.assertFalse(output.isDirty()); fos.flush(); fos.close(); Group group = input.getRootGroup().getGroups().get(g); assertEquals(g.toString(), group.getName()); assertEquals(g + 1, group.getEntries().size()); assertEquals(g+1, group.getEntriesCount()); assertEquals(input.getRootGroup(), group.getParent()); for (int e = 0; e <= g; e++) { Entry entry = (Entry) group.getEntries().get(e);
@Test public void testEmptyDatabase() { Assert.assertTrue (database.getRootGroup().getName().equals("Root")); Assert.assertTrue (database.getRootGroup().getEntries().size() == 0); Assert.assertTrue (database.getRootGroup().getGroups().size() == 0); }