/*******************************************************************************
* Copyright (c) 2008 The Eclipse Foundation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* The Eclipse Foundation - initial API and implementation
*******************************************************************************/
package org.dawnsci.usagedata.internal.recording.uploading;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.util.Dictionary;
import java.util.Hashtable;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.dawnsci.usagedata.internal.recording.UsageDataRecordingActivator;
import org.dawnsci.usagedata.internal.recording.settings.UploadSettings;
import org.dawnsci.usagedata.internal.recording.uploading.util.MockUploadSettings;
import org.dawnsci.usagedata.internal.recording.uploading.util.UploadGoodServlet;
import org.dawnsci.usagedata.internal.recording.uploading.util.UploaderTestUtils;
import org.eclipse.equinox.http.jetty.JettyConfigurator;
import org.eclipse.equinox.http.jetty.JettyConstants;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
import org.osgi.util.tracker.ServiceTracker;
public class BasicUploaderTests {
private static final String GOOD_SERVLET_NAME = "/upload_good";
private static final String SERVER_NAME = "usagedata.upload.tests";
private static int port;
private static ServiceTracker tracker;
@BeforeClass
public static void startServer() throws Exception {
Dictionary<String, Object> settings = new Hashtable<String, Object>();
settings.put(JettyConstants.OTHER_INFO, SERVER_NAME);
settings.put("http.port", 0);
JettyConfigurator.startServer(SERVER_NAME, settings);
ServiceReference[] reference = UsageDataRecordingActivator.getDefault().getBundle().getBundleContext().getServiceReferences("org.osgi.service.http.HttpService", "(other.info=usagedata.upload.tests)");
Object assignedPort = reference[0].getProperty("http.port");
port = Integer.parseInt((String)assignedPort);
tracker = new ServiceTracker(UsageDataRecordingActivator.getDefault().getBundle().getBundleContext(), reference[0], null);
tracker.open();
HttpService server = (HttpService)tracker.getService();
server.registerServlet(GOOD_SERVLET_NAME, new UploadGoodServlet(), null, null);
}
@AfterClass
public static void stopServer() throws Exception {
tracker.close();
JettyConfigurator.stopServer(SERVER_NAME);
}
@Test
public void testBigUpload() throws Exception {
MockUploadSettings settings = new MockUploadSettings();
settings.setUploadUrl("http://localhost:" + port + GOOD_SERVLET_NAME);
File file = UploaderTestUtils.createBogusUploadDataFile(90);
UploadParameters uploadParameters = new UploadParameters();
uploadParameters.setSettings(settings);
uploadParameters.setFiles(new File[] {file});
UploadResult result = new BasicUploader(uploadParameters).doUpload(new NullProgressMonitor());
assertEquals(200, result.getReturnCode());
assertFalse(file.exists());
}
@Test
public void testInvalidUrl() throws Exception {
MockUploadSettings settings = new MockUploadSettings();
settings.setUploadUrl("httpx://localhost:" + port + GOOD_SERVLET_NAME);
File file = UploaderTestUtils.createBogusUploadDataFile(1);
UploadParameters uploadParameters = new UploadParameters();
uploadParameters.setSettings(settings);
uploadParameters.setFiles(new File[] {file});
try {
new BasicUploader(uploadParameters).doUpload(new NullProgressMonitor());
fail("IllegalStateException expected.");
} catch (IllegalStateException e) {
// Expected
}
assertTrue(file.exists());
}
@Test
public void testUnknownHost() throws Exception {
MockUploadSettings settings = new MockUploadSettings();
settings.setUploadUrl("http://localhost:" + port + "/Non-existent-path");
File file = UploaderTestUtils.createBogusUploadDataFile(1);
UploadParameters uploadParameters = new UploadParameters();
uploadParameters.setSettings(settings);
uploadParameters.setFiles(new File[] {file});
UploadResult result = new BasicUploader(uploadParameters).doUpload(new NullProgressMonitor());
assertEquals(404, result.getReturnCode());
assertTrue(file.exists());
}
@Test
public void testTermsOfUseNotAccepted() {
UploadSettings settings = new MockUploadSettings() {
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean hasUserAcceptedTermsOfUse() {
return false;
}
};
UploadParameters uploadParameters = new UploadParameters();
uploadParameters.setSettings(settings);
assertFalse(new BasicUploader(uploadParameters).hasUserAuthorizedUpload());
}
@Test
public void testNotEnabled() {
UploadSettings settings = new MockUploadSettings() {
@Override
public boolean isEnabled() {
return false;
}
@Override
public boolean hasUserAcceptedTermsOfUse() {
return true;
}
};
UploadParameters uploadParameters = new UploadParameters();
uploadParameters.setSettings(settings);
assertFalse(new BasicUploader(uploadParameters).hasUserAuthorizedUpload());
}
}