diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java index bc56ac377b7139a14d31518c763a169769ac7a0c..4ad7e99eb7d4058271b74c147a7c19f1974aedc1 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogManager.java @@ -22,9 +22,9 @@ public interface BlogManager { ClientId CLIENT_ID = new ClientId("org.briarproject.briar.blog"); /** - * Adds a blog from the given author. + * Adds the given {@link Blog).} */ - Blog addBlog(Author author) throws DbException; + void addBlog(Blog b) throws DbException; /** * Adds the given {@link Blog} within the given {@link Transaction}. diff --git a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java index 845e69c69443a06216ce90515bb66af1cba47c22..e42932e1946f2b4d059a1cc476d170ce2a506de3 100644 --- a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java @@ -168,9 +168,7 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager, } @Override - public Blog addBlog(Author author) throws DbException { - Blog b = blogFactory.createBlog(author); - + public void addBlog(Blog b) throws DbException { Transaction txn = db.startTransaction(false); try { db.addGroup(txn, b.getGroup()); @@ -178,7 +176,6 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager, } finally { db.endTransaction(txn); } - return b; } @Override diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java index e13718352e8a950e51058205bfdf238ad8ee5835..b66b98124d5c99b42996344397e104b42420eb69 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingIntegrationTest.java @@ -11,6 +11,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.test.TestDatabaseModule; import org.briarproject.briar.api.blog.Blog; +import org.briarproject.briar.api.blog.BlogFactory; import org.briarproject.briar.api.blog.BlogInvitationRequest; import org.briarproject.briar.api.blog.BlogInvitationResponse; import org.briarproject.briar.api.blog.BlogManager; @@ -42,7 +43,7 @@ public class BlogSharingIntegrationTest extends BriarIntegrationTest<BriarIntegrationTestComponent> { private BlogManager blogManager0, blogManager1; - private Blog blog0, blog1, blog2; + private Blog blog0, blog1, blog2, rssBlog; private SharerListener listener0; private InviteeListener listener1; @@ -69,6 +70,8 @@ public class BlogSharingIntegrationTest blog0 = blogManager0.getPersonalBlog(author0); blog1 = blogManager0.getPersonalBlog(author1); blog2 = blogManager0.getPersonalBlog(author2); + BlogFactory blogFactory = c0.getBlogFactory(); + rssBlog = blogFactory.createFeedBlog(author0); // initialize waiters fresh for each test eventWaiter = new Waiter(); @@ -127,8 +130,7 @@ public class BlogSharingIntegrationTest // get sharing group and assert group message count GroupId g = contactGroupFactory.createContactGroup(CLIENT_ID, - contact1From0) - .getId(); + contact1From0).getId(); assertGroupCount(messageTracker0, g, 1, 0); // sync first request message @@ -146,6 +148,7 @@ public class BlogSharingIntegrationTest // blog was added successfully assertEquals(0, blogSharingManager0.getInvitations().size()); assertEquals(3, blogManager1.getBlogs().size()); + assertTrue(blogManager1.getBlogs().contains(blog2)); // invitee has one invitation message from sharer List<InvitationMessage> list = @@ -160,6 +163,7 @@ public class BlogSharingIntegrationTest assertFalse(invitation.isAvailable()); assertEquals(blog2.getAuthor().getName(), invitation.getBlogAuthorName()); + assertFalse(invitation.getShareable().isRssFeed()); assertEquals(contactId1From0, invitation.getContactId()); assertEquals("Hi!", invitation.getMessage()); } else { @@ -185,6 +189,81 @@ public class BlogSharingIntegrationTest assertGroupCount(messageTracker1, g, 2, 1); } + @Test + public void testSuccessfulSharingWithRssBlog() throws Exception { + // initialize and let invitee accept all requests + listenToEvents(true); + + // subscribe to RSS blog + blogManager0.addBlog(rssBlog); + + // send invitation + blogSharingManager0.sendInvitation(rssBlog.getId(), contactId1From0, + "Hi!", clock.currentTimeMillis()); + + // invitee has own blog and that of the sharer + assertEquals(2, blogManager1.getBlogs().size()); + + // get sharing group and assert group message count + GroupId g = contactGroupFactory.createContactGroup(CLIENT_ID, + contact1From0).getId(); + assertGroupCount(messageTracker0, g, 1, 0); + + // sync first request message + sync0To1(1, true); + eventWaiter.await(TIMEOUT, 1); + assertTrue(listener1.requestReceived); + assertGroupCount(messageTracker1, g, 2, 1); + + // sync response back + sync1To0(1, true); + eventWaiter.await(TIMEOUT, 1); + assertTrue(listener0.responseReceived); + assertGroupCount(messageTracker0, g, 2, 1); + + // blog was added successfully + assertEquals(0, blogSharingManager0.getInvitations().size()); + assertEquals(3, blogManager1.getBlogs().size()); + assertTrue(blogManager1.getBlogs().contains(rssBlog)); + + // invitee has one invitation message from sharer + List<InvitationMessage> list = + new ArrayList<InvitationMessage>(blogSharingManager1 + .getInvitationMessages(contactId0From1)); + assertEquals(2, list.size()); + // check other things are alright with the message + for (InvitationMessage m : list) { + if (m instanceof BlogInvitationRequest) { + BlogInvitationRequest invitation = + (BlogInvitationRequest) m; + assertFalse(invitation.isAvailable()); + assertEquals(rssBlog.getAuthor().getName(), + invitation.getBlogAuthorName()); + assertTrue(invitation.getShareable().isRssFeed()); + assertEquals(contactId1From0, invitation.getContactId()); + assertEquals("Hi!", invitation.getMessage()); + } else { + BlogInvitationResponse response = + (BlogInvitationResponse) m; + assertEquals(contactId0From1, response.getContactId()); + assertTrue(response.wasAccepted()); + assertTrue(response.isLocal()); + } + } + // sharer has own invitation message and response + assertEquals(2, blogSharingManager0.getInvitationMessages( + contactId1From0).size()); + // blog can not be shared again + assertFalse(blogSharingManager0.canBeShared(rssBlog.getId(), + contact1From0)); + assertFalse(blogSharingManager1.canBeShared(rssBlog.getId(), + contact0From1)); + + // group message count is still correct + assertGroupCount(messageTracker0, g, 2, 1); + assertGroupCount(messageTracker1, g, 2, 1); + } + @Test public void testDeclinedSharing() throws Exception { // initialize and let invitee deny all requests diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java index c114930bf8c330cb8bfd5ea58fcfe107b13ce773..679d7772aa7798c863aa4129dfbd27e347760b97 100644 --- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java +++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTestComponent.java @@ -24,6 +24,7 @@ import org.briarproject.bramble.test.TestDatabaseModule; import org.briarproject.bramble.test.TestPluginConfigModule; import org.briarproject.bramble.test.TestSeedProviderModule; import org.briarproject.bramble.transport.TransportModule; +import org.briarproject.briar.api.blog.BlogFactory; import org.briarproject.briar.api.blog.BlogManager; import org.briarproject.briar.api.blog.BlogSharingManager; import org.briarproject.briar.api.client.MessageTracker; @@ -138,4 +139,6 @@ public interface BriarIntegrationTestComponent { TransportPropertyManager getTransportPropertyManager(); AuthorFactory getAuthorFactory(); + + BlogFactory getBlogFactory(); }