/*
* Copyright 2010-2012, CloudBees Inc.
*
* 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.
*/
package com.cloudbees.api;
import com.cloudbees.api.util.CloudbeesServer;
import com.cloudbees.api.util.ProxyServer;
import org.apache.commons.fileupload.FileItem;
import org.apache.log4j.Logger;
import org.junit.*;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
/**
* @author <a href="mailto:Olivier.LAMY@accor.com">Olivier Lamy</a>
*/
public class BeesClientTruProxyTest {
private Logger log = Logger.getLogger(getClass());
@Test
public void directRequest() throws Exception {
CloudbeesServer cloudbeesServer = new CloudbeesServer();
cloudbeesServer.startServer();
try {
BeesClientConfiguration beesClientConfiguration =
new BeesClientConfiguration("http://localhost:" + cloudbeesServer.getPort() + "/", "foo", "bar",
"xml", "1.0");
BeesClient beesClient = new BeesClient(beesClientConfiguration);
ApplicationListResponse response = beesClient.applicationList();
assertNotNull(response);
assertEquals(2, response.getApplications().size());
} finally {
cloudbeesServer.stopServer();
}
}
@Test
public void requestTruProxy()
throws Exception {
ProxyServer.AuthAsyncProxyServlet authAsyncProxyServlet = new ProxyServer.AuthAsyncProxyServlet();
ProxyServer proxyServer = new ProxyServer(authAsyncProxyServlet);
CloudbeesServer cloudbeesServer = new CloudbeesServer();
cloudbeesServer.startServer();
try {
proxyServer.start();
BeesClientConfiguration beesClientConfiguration =
new BeesClientConfiguration("http://localhost:" + cloudbeesServer.getPort() + "/", "foo", "bar",
"xml", "1.0");
beesClientConfiguration.setProxyHost("localhost");
beesClientConfiguration.setProxyPort(proxyServer.getPort());
BeesClient beesClient = new BeesClient(beesClientConfiguration);
ApplicationListResponse response = beesClient.applicationList();
assertNotNull(response);
assertEquals(2, response.getApplications().size());
assertEquals(1, authAsyncProxyServlet.requestsReceived);
} finally {
cloudbeesServer.stopServer();
proxyServer.stop();
}
}
@Test
public void requestTruProxyWithAutz()
throws Exception {
Map<String, String> autzs = new HashMap<String, String>();
autzs.put("olamy", "yoyoyoyo");
ProxyServer.AuthAsyncProxyServlet authAsyncProxyServlet = new ProxyServer.AuthAsyncProxyServlet(autzs);
ProxyServer proxyServer = new ProxyServer(authAsyncProxyServlet);
CloudbeesServer cloudbeesServer = new CloudbeesServer();
cloudbeesServer.startServer();
try {
proxyServer.start();
BeesClientConfiguration beesClientConfiguration =
new BeesClientConfiguration("http://localhost:" + cloudbeesServer.getPort() + "/", "foo", "bar",
"xml", "1.0");
beesClientConfiguration.setProxyHost("localhost");
beesClientConfiguration.setProxyPort(proxyServer.getPort());
beesClientConfiguration.setProxyUser("olamy");
beesClientConfiguration.setProxyPassword("yoyoyoyo");
BeesClient beesClient = new BeesClient(beesClientConfiguration);
ApplicationListResponse response = beesClient.applicationList();
assertNotNull(response);
assertEquals(2, response.getApplications().size());
// one for authz + one for the request
assertEquals(2, authAsyncProxyServlet.requestsReceived);
} finally {
cloudbeesServer.stopServer();
proxyServer.stop();
}
}
@Test
public void deployWarArchive() throws Exception {
CloudbeesServer cloudbeesServer = new CloudbeesServer();
cloudbeesServer.startServer();
File local = new File("src/test/translate-puzzle-webapp-1.0.0-SNAPSHOT.war");
File uploaded = File.createTempFile("uploaded", "foo");
assertThat("We have the file to upload", local.isFile(), is(true));
assertThat("We have created the temp file to be uploaded", uploaded.isFile(), is(true));
assertThat("Precondition", local.length(), not(is(uploaded.length())));
try {
BeesClientConfiguration beesClientConfiguration =
new BeesClientConfiguration("http://localhost:" + cloudbeesServer.getPort() + "/", "foo", "bar",
"xml", "1.0");
BeesClient beesClient = new BeesClient(beesClientConfiguration);
beesClient.setVerbose(true);
MockUploadProgress mockUploadProgress = new MockUploadProgress();
beesClient.applicationDeployWar("fooId", "env", "desc", local, null, mockUploadProgress);
assertNotNull(cloudbeesServer.cloudbessServlet.items);
int realFilesNumber = 0;
for (FileItem fileItem : cloudbeesServer.cloudbessServlet.items) {
log.info("fileItem " + fileItem.getName() + ", size " + fileItem.getSize());
if (fileItem.getName() != null) {
realFilesNumber++;
fileItem.write(uploaded);
}
}
assertEquals(1, realFilesNumber);
assertThat("Postcondition", local.length(), is(uploaded.length()));
} catch (Exception e) {
throw e;
} finally {
cloudbeesServer.stopServer();
uploaded.delete();
}
}
static class MockUploadProgress implements UploadProgress {
long total;
public void handleBytesWritten(long deltaCount, long totalWritten, long totalToSend) {
//
}
}
}