java: Hook and test the Service.ListDatabases and Database.Create

The listing of databases doesn't work properly so the test doesn't
attempt to list the databases after creating a database.

MultiPart: 1/2
Change-Id: Id8471545d1eef90fe2051b0ebba77f19b394a027
diff --git a/syncbase/src/main/java/io/v/syncbase/internal/Id.java b/syncbase/src/main/java/io/v/syncbase/internal/Id.java
index c9afdd7..34e912b 100644
--- a/syncbase/src/main/java/io/v/syncbase/internal/Id.java
+++ b/syncbase/src/main/java/io/v/syncbase/internal/Id.java
@@ -7,4 +7,20 @@
 public class Id {
     String blessing;
     String name;
+
+    public Id() {
+        // This empty constructor makes the JNI code a little bit simpler by making this class
+        // similar to other classes for which we cache class/method/field IDs.
+    }
+
+    public Id(String blessing, String name) {
+        this.blessing = blessing;
+        this.name = name;
+    }
+
+    // TODO(razvanm): Switch to v23_syncbase_EncodeId.
+    // Reference: https://github.com/vanadium/go.v23/blob/master/syncbase/util/util.go
+    public String toString() {
+        return blessing + "," + name;
+    }
 }
diff --git a/syncbase/src/main/java/io/v/syncbase/internal/VError.java b/syncbase/src/main/java/io/v/syncbase/internal/VError.java
index c6e9192..721c2ca 100644
--- a/syncbase/src/main/java/io/v/syncbase/internal/VError.java
+++ b/syncbase/src/main/java/io/v/syncbase/internal/VError.java
@@ -9,4 +9,9 @@
     long actionCode;
     String message;
     String stack;
+
+    public String toString() {
+        return String.format("{\n  id: \"%s\"\n  actionCode: %d\n  message: \"%s\"\n  stack: \"%s\"}",
+                id, actionCode, message, stack);
+    }
 }
\ No newline at end of file
diff --git a/syncbase/src/test/java/io/v/syncbase/internal/DatabaseTest.java b/syncbase/src/test/java/io/v/syncbase/internal/DatabaseTest.java
new file mode 100644
index 0000000..6c5baa4
--- /dev/null
+++ b/syncbase/src/test/java/io/v/syncbase/internal/DatabaseTest.java
@@ -0,0 +1,44 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.syncbase.internal;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class DatabaseTest {
+    @Before
+    public void setUp() {
+        System.loadLibrary("syncbase");
+    }
+
+    @Test
+    public void createDatabase() {
+        Id dbId = new Id("blessing", "db");
+        // The instance is empty so creating of a database should succeed.
+        try {
+            Database.Create(dbId.toString(), null);
+        } catch (VError vError) {
+            fail();
+        }
+
+        // Creating the same database should raise an exception.
+        boolean exceptionThrown = false;
+        try {
+            Database.Create(dbId.toString(), null);
+        } catch (VError vError) {
+            assertEquals("v.io/v23/verror.Exist", vError.id);
+            assertNotNull(vError.message);
+            assertNotNull(vError.stack);
+            assertEquals(0, vError.actionCode);
+            exceptionThrown = true;
+        }
+        assertTrue(exceptionThrown);
+    }
+}
diff --git a/syncbase/src/test/java/io/v/syncbase/internal/ServiceTest.java b/syncbase/src/test/java/io/v/syncbase/internal/ServiceTest.java
new file mode 100644
index 0000000..58e5ebb
--- /dev/null
+++ b/syncbase/src/test/java/io/v/syncbase/internal/ServiceTest.java
@@ -0,0 +1,22 @@
+// Copyright 2016 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.syncbase.internal;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertTrue;
+
+public class ServiceTest {
+    @Before
+    public void setUp() {
+        System.loadLibrary("syncbase");
+    }
+
+    @Test
+    public void listDatabases() {
+        assertTrue(Service.ListDatabases().isEmpty());
+    }
+}