From 2e7ac658835edaffd9651fe91a55536d683bbd21 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Thu, 6 Apr 2017 16:50:02 +0100 Subject: [PATCH] Tests: Add some basic tests. --- .../journalmanager/ServiceTest.java | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 app/src/test/java/com/etesync/syncadapter/journalmanager/ServiceTest.java diff --git a/app/src/test/java/com/etesync/syncadapter/journalmanager/ServiceTest.java b/app/src/test/java/com/etesync/syncadapter/journalmanager/ServiceTest.java new file mode 100644 index 00000000..23430480 --- /dev/null +++ b/app/src/test/java/com/etesync/syncadapter/journalmanager/ServiceTest.java @@ -0,0 +1,129 @@ +/* + * Copyright © 2013 – 2015 Ricki Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + */ + +package com.etesync.syncadapter.journalmanager; + +import com.etesync.syncadapter.App; +import com.etesync.syncadapter.HttpClient; +import com.etesync.syncadapter.model.CollectionInfo; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.util.List; + +import okhttp3.HttpUrl; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okio.BufferedSink; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class ServiceTest { + private OkHttpClient httpClient; + private HttpUrl remote; + private String authToken; + + @Before + public void setUp() throws Exception { + httpClient = HttpClient.create(null); + remote = HttpUrl.parse("http://localhost:8000"); // FIXME: hardcode for now, should make configureable + JournalAuthenticator journalAuthenticator = new JournalAuthenticator(httpClient, remote); + authToken = journalAuthenticator.getAuthToken(Helpers.USER, Helpers.PASSWORD); + + httpClient = HttpClient.create(null, App.log, null, authToken); + + /* Reset */ + Request request = new Request.Builder() + .post(new RequestBody() { + @Override + public MediaType contentType() { + return null; + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + + } + }) + .url(remote.newBuilder().addEncodedPathSegments("reset/").build()) + .build(); + Response response = httpClient.newCall(request).execute(); + if (!response.isSuccessful()) { + throw new Exception("Failed resetting"); + } + } + + @After + public void tearDown() throws IOException { + } + + @Test + public void testSyncSimple() throws IOException, Exceptions.HttpException, Exceptions.GenericCryptoException, Exceptions.IntegrityException { + Exception caught; + JournalManager journalManager = new JournalManager(httpClient, remote); + CollectionInfo info = CollectionInfo.defaultForServiceType(CollectionInfo.Type.ADDRESS_BOOK); + info.url = JournalManager.Journal.genUid(); + info.displayName = "Test"; + Crypto.CryptoManager crypto = new Crypto.CryptoManager(info.version, Helpers.keyBase64, info.url); + JournalManager.Journal journal = new JournalManager.Journal(crypto, info.toJson(), info.url); + journalManager.putJournal(journal); + + // Try pushing the same journal (uid clash) + try { + caught = null; + journalManager.putJournal(journal); + } catch (Exceptions.HttpException e) { + caught = e; + } + assertNotNull(caught); + + List journals = journalManager.getJournals(Helpers.keyBase64); + assertEquals(journals.size(), 1); + CollectionInfo info2 = CollectionInfo.fromJson(journals.get(0).getContent(crypto)); + assertEquals(info2.displayName, info.displayName); + + // Update journal + info.displayName = "Test 2"; + journal = new JournalManager.Journal(crypto, info.toJson(), info.url); + journalManager.updateJournal(journal); + + journals = journalManager.getJournals(Helpers.keyBase64); + assertEquals(journals.size(), 1); + info2 = CollectionInfo.fromJson(journals.get(0).getContent(crypto)); + assertEquals(info2.displayName, info.displayName); + + // Delete journal + journalManager.deleteJournal(journal); + + journals = journalManager.getJournals(Helpers.keyBase64); + assertEquals(journals.size(), 0); + + // Bad HMAC + info.url = JournalManager.Journal.genUid(); + journal = new JournalManager.Journal(crypto, info.toJson(), info.url); + info.displayName = "Test 3"; + //// We assume this doesn't update the hmac. + journal.setContent(crypto, info.toJson()); + journalManager.putJournal(journal); + + try { + caught = null; + journalManager.getJournals(Helpers.keyBase64); + } catch (Exceptions.IntegrityException e) { + caught = e; + } + assertNotNull(caught); + } +}