From cc8ed1cd3ae8eba66f37aad2ad9e330c3ddc99c0 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Wed, 5 Sep 2018 15:36:28 -0700 Subject: [PATCH] Create simple integration test for digester process. Much of this lived in the separate testapp, but we can exercise a lot of the code as an integration test in the main project, so let's do so. --- core/pom.xml | 42 ++++++++++++++ .../getdown/tests/DigesterTest.java | 53 ++++++++++++++++++ core/src/it/resources/testapp/background.png | Bin 0 -> 32808 bytes .../it/resources/testapp/crazyhashfile#txt | 1 + core/src/it/resources/testapp/foo.jar | Bin 0 -> 670 bytes .../testapp/funny%test dir/some=file.txt | 1 + core/src/it/resources/testapp/getdown.txt | 28 +++++++++ core/src/it/resources/testapp/script.sh | 3 + core/src/it/resources/testapp/testapp.jar | Bin 0 -> 823 bytes 9 files changed, 128 insertions(+) create mode 100644 core/src/it/java/com/threerings/getdown/tests/DigesterTest.java create mode 100644 core/src/it/resources/testapp/background.png create mode 100644 core/src/it/resources/testapp/crazyhashfile#txt create mode 100644 core/src/it/resources/testapp/foo.jar create mode 100644 core/src/it/resources/testapp/funny%test dir/some=file.txt create mode 100644 core/src/it/resources/testapp/getdown.txt create mode 100644 core/src/it/resources/testapp/script.sh create mode 100644 core/src/it/resources/testapp/testapp.jar diff --git a/core/pom.xml b/core/pom.xml index 1317659..6ce49f3 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -34,6 +34,48 @@ LICENSE + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.5 + + + add-test-source + process-resources + + add-test-source + + + + src/it/java + + + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.15 + + + integration-test + + integration-test + + + + verify + + verify + + + + + diff --git a/core/src/it/java/com/threerings/getdown/tests/DigesterTest.java b/core/src/it/java/com/threerings/getdown/tests/DigesterTest.java new file mode 100644 index 0000000..342a0d6 --- /dev/null +++ b/core/src/it/java/com/threerings/getdown/tests/DigesterTest.java @@ -0,0 +1,53 @@ +// +// Getdown - application installer, patcher and launcher +// Copyright (C) 2004-2016 Getdown authors +// https://github.com/threerings/getdown/blob/master/LICENSE + +package com.threerings.getdown.tests; + +import java.io.File; +import java.nio.file.*; +import java.util.Arrays; +import java.util.List; + +import org.junit.*; +import static org.junit.Assert.*; + +import com.threerings.getdown.tools.Digester; + +public class DigesterTest { + + @Test + public void testDigester () throws Exception { + Path appdir = Paths.get("src/it/resources/testapp"); + Digester.createDigests(appdir.toFile(), null, null, null); + + Path digest = appdir.resolve("digest.txt"); + List digestLines = Files.readAllLines(digest); + Files.delete(digest); + + Path digest2 = appdir.resolve("digest2.txt"); + List digest2Lines = Files.readAllLines(digest2); + Files.delete(digest2); + + assertEquals(Arrays.asList( + "getdown.txt = 779c74fb4b251e18faf6e240a0667964", + "testapp.jar = 404dafa55e78b25ec0e3a936357b1883", + "funny%test dir/some=file.txt = d8e8fca2dc0f896fd7cb4cb0031ba249", + "crazyhashfile#txt = f29d23fd5ab1781bd8d0760b3a516f16", + "foo.jar = 46ca4cc9079d9d019bb30cd21ebbc1ec", + "script.sh = f66e8ea25598e67e99c47d9b0b2a2cdf", + "digest.txt = f5561d85e4d80cc85883963897e58ff6" + ), digestLines); + + assertEquals(Arrays.asList( + "getdown.txt = 4f0c657895c3c3a35fa55bf5951c64fa9b0694f8fc685af3f1d8635c639e066b", + "testapp.jar = c9cb1906afbf48f8654b416c3f831046bd3752a76137e5bf0a9af2f790bf48e0", + "funny%test dir/some=file.txt = f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2", + "crazyhashfile#txt = 6816889f922de38f145db215a28ad7c5e1badf7354b5cdab225a27486789fa3b", + "foo.jar = ea188b872e0496debcbe00aaadccccb12a8aa9b025bb62c130cd3d9b8540b062", + "script.sh = cca1c5c7628d9bf7533f655a9cfa6573d64afb8375f81960d1d832dc5135c988", + "digest2.txt = 70b442c9f56660561921da3368e1a206f05c379182fab3062750b7ddcf303407" + ), digest2Lines); + } +} diff --git a/core/src/it/resources/testapp/background.png b/core/src/it/resources/testapp/background.png new file mode 100644 index 0000000000000000000000000000000000000000..ff6a6eea907f069c76f218559a23c7ebadf13a58 GIT binary patch literal 32808 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 WG~5EbSwVrtzzT#)ASobbU;qFYmw1u@ literal 0 HcmV?d00001 diff --git a/core/src/it/resources/testapp/funny%test dir/some=file.txt b/core/src/it/resources/testapp/funny%test dir/some=file.txt new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/core/src/it/resources/testapp/funny%test dir/some=file.txt @@ -0,0 +1 @@ +test diff --git a/core/src/it/resources/testapp/getdown.txt b/core/src/it/resources/testapp/getdown.txt new file mode 100644 index 0000000..3e0e538 --- /dev/null +++ b/core/src/it/resources/testapp/getdown.txt @@ -0,0 +1,28 @@ +# where our app is hosted on the internets +appbase = http://notused.com/testapp + +# the jar file that contains our code +code = testapp.jar + +# the main entry point of our app +class = com.threerings.testapp.TestApp + +# we pass the appdir to our app so that it can upgrade getdown +apparg = %APPDIR% + +# test the %env% mechanism +jvmarg = -Dusername=\%ENV.USER% + +strict_comments = true +resource = funny%test dir/some=file.txt +resource = crazyhashfile#txt +uresource = foo.jar +xresource = script.sh + +ui.name = Getdown Test App +ui.background_image = background.png +ui.progress = 17, 321, 458, 22 +ui.progress_bar = 336600 +ui.progress_text = FFFFFF +ui.status = 57, 245, 373, 68 +ui.status_text = 000000 diff --git a/core/src/it/resources/testapp/script.sh b/core/src/it/resources/testapp/script.sh new file mode 100644 index 0000000..e3a1aba --- /dev/null +++ b/core/src/it/resources/testapp/script.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +echo "Hello world!" diff --git a/core/src/it/resources/testapp/testapp.jar b/core/src/it/resources/testapp/testapp.jar new file mode 100644 index 0000000000000000000000000000000000000000..fe9de0201844514c70683cd4a7c9491f44b515cf GIT binary patch literal 823 zcmWIWW@Zs#;Nak3_)w$j%YXzp8CV#6T|*poJ^kGD|D9rBU}gyLX6FE@V1gvRs&ev7IF;+x0>duZ?+nlXcPqw72`VqM+px`0v@%GG1?N=?>R^|jtl?+2UtuH}~7CYj}(z@}{$=OBE2Zz}WRR-3n1 z=J3pzIpLmArSGPmoPRHv-%PdJB2~q0Y~Vdb)S~#+K_9Lu_a>}NyFW4dLM~Sz->IyY z)tj}l_k$8e*9q2h_KXY+=YcrDn~_O`0X0p*5)3F!p#pd!0i`f>t;q2VN>K=43uMBz nBBd{66F}(!*