/*******************************************************************************
* Copyright (c) Feb 9, 2011 Zend Technologies Ltd.
* 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
*******************************************************************************/
package org.zend.webapi.test.connection.services;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit.framework.Assert;
import org.junit.Test;
import org.restlet.engine.io.BioUtils;
import org.restlet.representation.Representation;
import org.zend.webapi.core.WebApiException;
import org.zend.webapi.core.connection.data.ServerConfig;
import org.zend.webapi.core.connection.data.ServersList;
import org.zend.webapi.core.connection.request.IRequest;
import org.zend.webapi.core.connection.request.IRequestInitializer;
import org.zend.webapi.core.connection.request.NamedInputStream;
import org.zend.webapi.core.connection.request.RequestParameter;
import org.zend.webapi.core.connection.response.IResponse;
import org.zend.webapi.core.connection.response.ResponseCode;
import org.zend.webapi.core.service.WebApiMethodType;
import org.zend.webapi.internal.core.connection.exception.InternalWebApiException;
import org.zend.webapi.internal.core.connection.request.ConfigurationImportRequest;
import org.zend.webapi.internal.core.connection.request.MultipartRepresentation;
import org.zend.webapi.test.AbstractTestServer;
import org.zend.webapi.test.Configuration;
import org.zend.webapi.test.DataUtils;
import org.zend.webapi.test.server.utils.ServerUtils;
public class TestServerConfiguration extends AbstractTestServer {
public static final String CONFIG_FOLDER = "configuration/";
public static final String EXAMLE_CONFIG = "myConfig.zcfg";
@Test
public void testConfigurationExport() throws WebApiException,
FileNotFoundException, IOException {
initFileMock(handler.configurationExport(), "configurationExport",
ResponseCode.OK, CONFIG_FOLDER, EXAMLE_CONFIG);
final ServerConfig config = Configuration.getClient()
.configuratioExport();
Assert.assertTrue(config.getFileSize() > 0);
Assert.assertNotNull(config.getFilename());
Assert.assertNotNull(config.getFileContent());
Assert.assertEquals(config.getFileSize(),
config.getFileContent().length);
}
@Test
public void testConfigurationImport() throws WebApiException,
FileNotFoundException, IOException {
initMock(handler.configurationImport(), "configurationImport",
ResponseCode.OK);
final File tFile = prepareFile();
final ServersList list = Configuration.getClient().configuratioImport(
new NamedInputStream(tFile));
DataUtils.checkValidServersList(list);
}
@Test
public void testConfigurationImportIgnoreMismatch() throws WebApiException,
FileNotFoundException, IOException {
initMock(handler.configurationImport(), "configurationImport",
ResponseCode.OK);
final File tFile = prepareFile();
final ServersList list = Configuration.getClient().configuratioImport(
new NamedInputStream(tFile), true);
DataUtils.checkValidServersList(list);
}
@Test
public void testConfigurationImportParams() throws WebApiException,
MalformedURLException, FileNotFoundException {
initMock(handler.configurationImport(), "configurationImport",
ResponseCode.OK);
final File tFile = prepareFile();
IResponse response = Configuration.getClient().handle(
WebApiMethodType.CONFIGURATION_IMPORT,
new IRequestInitializer() {
public void init(IRequest request) throws WebApiException {
ConfigurationImportRequest r = (ConfigurationImportRequest) request;
r.setConfigStream(new NamedInputStream(tFile));
r.setIgnoreSystemMismatch(true);
}
});
final ConfigurationImportRequest request = (ConfigurationImportRequest) response
.getRequest();
final List<RequestParameter<?>> parameters = request.getParameters();
Assert.assertEquals(2, parameters.size());
}
@Test
public void testMultipart() throws IOException {
final ArrayList<RequestParameter<?>> arrayList = new ArrayList<RequestParameter<?>>();
arrayList.add(new RequestParameter<Boolean>("ignoreSystemMismatch",
true));
File file = getTempFile("mySavedConfig");
file.deleteOnExit();
arrayList.add(new RequestParameter<NamedInputStream>("configFile", new NamedInputStream(file)));
Representation representation = new MultipartRepresentation(arrayList,
"--bla-bla-bla--",
ConfigurationImportRequest.APPLICATION_SERVER_CONFIG);
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
representation.write(outputStream);
final String actual = outputStream.toString();
final InputStream resourceAsStream = new FileInputStream(new File(
ServerUtils.createFileName(CONFIG_FOLDER + "multipart.txt")));
String expected = BioUtils.toString(resourceAsStream);
expected = expected.replace("%filename%", file.getName());
Assert.assertEquals("Error comparing expected/actual", expected, actual);
}
@Test
public void testMultipartHashMap() throws IOException {
final ArrayList<RequestParameter<?>> arrayList = new ArrayList<RequestParameter<?>>();
Map<String, String> hashMap = new HashMap<String, String>();
hashMap.put("test1", "value1");
hashMap.put("test2", "value2");
arrayList
.add(new RequestParameter<Map<String, String>>("map", hashMap));
Representation representation = new MultipartRepresentation(arrayList,
"--bla-bla-bla--",
ConfigurationImportRequest.APPLICATION_SERVER_CONFIG);
final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
representation.write(outputStream);
final String actual = outputStream.toString();
final InputStream resourceAsStream = new FileInputStream(new File(
ServerUtils.createFileName(CONFIG_FOLDER
+ "multipartHashMap.txt")));
String expected = BioUtils.toString(resourceAsStream);
Assert.assertEquals(expected, actual);
}
@Test(expected = IllegalArgumentException.class)
public void testMultipartNullBoundary() {
final ArrayList<RequestParameter<?>> arrayList = new ArrayList<RequestParameter<?>>();
new MultipartRepresentation(arrayList, (String) null);
}
private File getTempFile(String prefix) throws IOException {
File file = File.createTempFile(prefix, ".zcfg");
FileWriter writer = new FileWriter(file);
writer.write("[...binary data follows...]");
writer.flush();
writer.close();
return file;
}
private File prepareFile() throws InternalWebApiException,
FileNotFoundException {
File tFile = null;
try {
tFile = File.createTempFile("test", "zcfg");
} catch (IOException e) {
}
tFile.deleteOnExit();
final InputStream isSource = new FileInputStream(new File(
ServerUtils.createFileName(CONFIG_FOLDER + EXAMLE_CONFIG)));
try {
BioUtils.copy(isSource, new FileOutputStream(tFile));
} catch (Exception e) {
throw new InternalWebApiException(e);
}
return tFile;
}
}