/**
* Copyright 2012-2013 Maciej Jaworski, Mariusz Kapcia, Paweł Kędzia, Mateusz Kubuszok
*
* <p>Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at</p>
*
* <p>http://www.apache.org/licenses/LICENSE-2.0</p>
*
* <p>Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.</p>
*/
package com.autoupdater.client.download.aggregated.services;
import static org.fest.assertions.api.Assertions.assertThat;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.SortedSet;
import java.util.TreeSet;
import org.junit.Test;
import com.autoupdater.client.download.DownloadResultException;
import com.autoupdater.client.download.runnables.HttpURLConnectionMock;
import com.autoupdater.client.download.services.UpdateInfoDownloadService;
import com.autoupdater.client.models.Package;
import com.autoupdater.client.models.PackageBuilder;
import com.autoupdater.client.models.Program;
import com.autoupdater.client.models.ProgramBuilder;
import com.autoupdater.client.models.Update;
import com.autoupdater.client.models.VersionNumber;
public class TestUpdateInfoAggregatedDownloadService {
private final String update1Package1 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ ("<updates>"
+ ("<update packageName=\"Test package\" packageId=\"2\" "
+ "version=\"12.34.56.78\" developmentVersion=\"true\" "
+ "id=\"1\" type=\"copy\" originalName=\"file.ini\" relativePath=\"/\">Some changes</update>")
+ "</updates>");
private final String update1Package2 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ ("<updates>"
+ ("<update packageName=\"other test package\" packageId=\"3\" "
+ "version=\"98.76.54.32\" developmentVersion=\"true\" "
+ "id=\"4\" type=\"copy\" originalName=\"file.ini\" relativePath=\"/\">Some other changes</update>")
+ "</updates>");
private final String update2Package1 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ ("<updates>"
+ ("<update packageName=\"Test package\" packageId=\"2\" "
+ "version=\"12.34.56.89\" developmentVersion=\"true\" "
+ "id=\"1\" type=\"copy\" originalName=\"file.ini\" relativePath=\"/\">Some changes</update>")
+ "</updates>");
private final String update2Package2 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ ("<updates>"
+ ("<update packageName=\"other test package\" packageId=\"3\" "
+ "version=\"98.76.54.43\" developmentVersion=\"true\" "
+ "id=\"4\" type=\"copy\" originalName=\"file.ini\" relativePath=\"/\">Some other changes</update>")
+ "</updates>");
@Test
public void testService() throws DownloadResultException {
// given
Program program = program();
UpdateInfoAggregatedDownloadService aggregatedService = new UpdateInfoAggregatedDownloadService();
addService(aggregatedService, update1Package1, program.getPackages().first());
addService(aggregatedService, update1Package2, program.getPackages().last());
SortedSet<Update> result = null;
// when
aggregatedService.start();
aggregatedService.joinThread();
result = aggregatedService.getResult();
// then
assertThat(result).as("getResult() should aggregate results from all services").isNotNull()
.hasSize(2);
assertThat(program.getPackages().first().getUpdates()).as(
"getResult() properly inserts Update into Package").isNotNull();
assertThat(program.getPackages().first().getUpdates().last().getVersionNumber())
.as("getResult() properly inserts Update into Package").isNotNull()
.isEqualTo(VersionNumber.version(12, 34, 56, 78));
assertThat(program.getPackages().last().getUpdates()).as(
"getResult() properly inserts Update into Package").isNotNull();
assertThat(program.getPackages().last().getUpdates().last().getVersionNumber())
.as("getResult() properly inserts Update into Package").isNotNull()
.isEqualTo(VersionNumber.version(98, 76, 54, 32));
}
@Test
public void testUpdate() throws DownloadResultException {
// given
Program program = program();
UpdateInfoAggregatedDownloadService aggregatedService = new UpdateInfoAggregatedDownloadService();
addService(aggregatedService, update1Package1, program.getPackages().first());
addService(aggregatedService, update1Package2, program.getPackages().last());
UpdateInfoAggregatedDownloadService aggregatedService2 = new UpdateInfoAggregatedDownloadService();
addService(aggregatedService2, update2Package1, program.getPackages().first());
addService(aggregatedService2, update2Package2, program.getPackages().last());
// when
aggregatedService.start();
aggregatedService.joinThread();
aggregatedService.getResult();
aggregatedService2.start();
aggregatedService2.joinThread();
aggregatedService2.getResult();
// then
assertThat(program.getPackages().first().getUpdates()).as(
"getResult() properly inserts Update into Package").isNotNull();
assertThat(program.getPackages().first().getUpdates().last().getVersionNumber())
.as("getResult() properly inserts Update into Package").isNotNull()
.isEqualTo(VersionNumber.version(12, 34, 56, 89));
assertThat(program.getPackages().last().getUpdates()).as(
"getResult() properly inserts Update into Package").isNotNull();
assertThat(program.getPackages().last().getUpdates().last().getVersionNumber())
.as("getResult() properly inserts Update into Package").isNotNull()
.isEqualTo(VersionNumber.version(98, 76, 54, 43));
}
private Program program() {
return ProgramBuilder
.builder()
.setName("name")
.setPackages(
new TreeSet<Package>(Arrays.asList(PackageBuilder.builder().setName("1")
.setID("1").build(),
PackageBuilder.builder().setName("2").setID("2").build())))
.setDevelopmentVersion(true).build();
}
private void addService(UpdateInfoAggregatedDownloadService aggregatedService, String xml,
Package _package) {
try {
aggregatedService.addService(new UpdateInfoDownloadService(new HttpURLConnectionMock(
new URL("http://127.0.0.1"), xml)), _package);
} catch (MalformedURLException e) {
}
}
}