From 480b0e3a03ba044f5dffe8da13b9ad9a17a7a435 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 7 Jul 2017 17:30:44 +0100 Subject: [PATCH 1/2] Create correct shareable for RSS blogs. Also removed "personal blog" wording that doesn't apply to RSS blogs. --- .../briar/android/blog/BlogFragment.java | 10 +++++----- briar-android/src/main/res/values/strings.xml | 5 ++--- .../briar/sharing/BlogMessageParserImpl.java | 4 +++- .../briar/sharing/SharingManagerImpl.java | 12 +++++------- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java index cb0981f36..d1fb275e5 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java @@ -226,8 +226,8 @@ public class BlogFragment extends BaseFragment private void loadBlogPosts(final boolean reload) { blogController.loadBlogPosts( - new UiResultExceptionHandler, DbException>( - this) { + new UiResultExceptionHandler, + DbException>(this) { @Override public void onResultUi(Collection posts) { if (posts.isEmpty()) { @@ -265,13 +265,13 @@ public class BlogFragment extends BaseFragment } private void setToolbarTitle(Author a) { - String title = getString(R.string.blogs_personal_blog, a.getName()); - getActivity().setTitle(title); + getActivity().setTitle(a.getName()); } private void loadSharedContacts() { blogController.loadSharingContacts( - new UiResultExceptionHandler, DbException>(this) { + new UiResultExceptionHandler, + DbException>(this) { @Override public void onResultUi(Collection contacts) { sharingController.addAll(contacts); diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index 22c21a1ee..923f2b40a 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -268,7 +268,6 @@ New Blog Post Received Scroll To This is the global blog feed.\n\nIt looks like nobody blogged anything, yet.\n\nBe the first and tap the pen icon to write a new blog post. - %s\'s Personal Blog Remove Blog Are you sure that you want to remove this blog and all posts?\nNote that this will not remove the blog from other people\'s devices. Remove Blog @@ -285,8 +284,8 @@ You declined the blog invitation from %s. %s accepted the blog invitation. %s declined the blog invitation. - %1$s has shared the personal blog of %2$s with you. - You have shared the personal blog of %1$s with %2$s. + %1$s has shared the blog \"%2$s\" with you. + You have shared the blog \"%1$s\" with %2$s. Blog Invitations Subscribed to Blog Blog Invitation Declined diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogMessageParserImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogMessageParserImpl.java index bcf011519..6795b0fb0 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogMessageParserImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogMessageParserImpl.java @@ -32,8 +32,10 @@ class BlogMessageParserImpl extends MessageParserImpl { throws FormatException { String name = descriptor.getString(0); byte[] publicKey = descriptor.getRaw(1); + boolean rssFeed = descriptor.getBoolean(2); Author author = authorFactory.createAuthor(name, publicKey); - return blogFactory.createBlog(author); + if (rssFeed) return blogFactory.createFeedBlog(author); + else return blogFactory.createBlog(author); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java index 0b99d75bf..461937caa 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java @@ -139,12 +139,11 @@ abstract class SharingManagerImpl return false; } - protected void initializeSharedSession(Transaction txn, Contact c, - S shareable) throws DbException, FormatException { + void initializeSharedSession(Transaction txn, Contact c, S shareable) + throws DbException, FormatException { GroupId contactGroupId = getContactGroup(c).getId(); - Session session = - new Session(SHARING, contactGroupId, shareable.getId(), null, - null, 0, 0); + Session session = new Session(SHARING, contactGroupId, + shareable.getId(), null, null, 0, 0); MessageId storageId = createStorageId(txn, contactGroupId); storeSession(txn, storageId, session); } @@ -442,8 +441,7 @@ abstract class SharingManagerImpl } } - protected void removingShareable(Transaction txn, S shareable) - throws DbException { + void removingShareable(Transaction txn, S shareable) throws DbException { SessionId sessionId = getSessionId(shareable.getId()); // If we have any sessions in progress, tell the contacts we're leaving try { From 2007078f136f5695a759b8c7a78a68616779065c Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 7 Jul 2017 18:02:15 +0100 Subject: [PATCH 2/2] Added test for sharing an RSS blog. --- .../briar/api/blog/BlogManager.java | 4 +- .../briar/blog/BlogManagerImpl.java | 5 +- .../sharing/BlogSharingIntegrationTest.java | 85 ++++++++++++++++++- .../test/BriarIntegrationTestComponent.java | 3 + 4 files changed, 88 insertions(+), 9 deletions(-) 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 bc56ac377..4ad7e99eb 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 845e69c69..e42932e19 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 e13718352..b66b98124 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 { 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 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 list = + new ArrayList(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 c114930bf..679d7772a 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(); }