/*
* Copyright 2010 Proofpoint, 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.proofpoint.cloudmanagement.service.inventoryclient;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.proofpoint.cloudmanagement.service.inventoryclient.MockInventoryServer.MockInventoryServerModule;
import com.proofpoint.configuration.ConfigurationFactory;
import com.proofpoint.configuration.ConfigurationModule;
import com.proofpoint.http.server.testing.TestingHttpServer;
import com.proofpoint.http.server.testing.TestingHttpServerModule;
import com.proofpoint.jaxrs.JaxrsModule;
import com.proofpoint.json.JsonModule;
import com.proofpoint.node.testing.TestingNodeModule;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.ws.rs.core.UriBuilder;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public class TestClient
{
private InventoryClient client;
private TestingHttpServer server;
private MockInventoryServer inventoryServer;
private static final String INVENTORY_USER = "readonly";
private static final String INVENTORY_PASSWORD = "readonly";
@BeforeMethod
public void setup()
throws Exception
{
Injector inventoryServerInjector = Guice.createInjector(
new TestingHttpServerModule(),
new TestingNodeModule(),
new JaxrsModule(),
new JsonModule(),
new MockInventoryServerModule()
);
server = inventoryServerInjector.getInstance(TestingHttpServer.class);
inventoryServer = inventoryServerInjector.getInstance(MockInventoryServer.class);
server.start();
Injector injector = Guice.createInjector(
new JsonModule(),
new InventoryClientModule(),
new ConfigurationModule(
new ConfigurationFactory(
ImmutableMap.<String, String>builder()
.put("inventory.user",
INVENTORY_USER)
.put("inventory.password",
INVENTORY_PASSWORD)
.put("inventory.base-uri",
UriBuilder.fromUri(server.getBaseUrl())
.path("/inv_api/v1")
.build()
.toString())
.build())));
client = injector.getInstance(InventoryClient.class);
}
@Test
public void testGetSystem()
throws Exception
{
String id = UUID.randomUUID().toString();
Map<String, String> response = inventoryServer.getPcmName(id);
String name = response.get("fqdn");
InventorySystem system = client.getSystem(name);
Assert.assertEquals(system.getSerialNumber(), id);
}
@Test
public void testGetMissingSystem()
throws Exception
{
InventorySystem system = client.getSystem(UUID.randomUUID().toString());
Assert.assertNull(system);
}
@Test
public void testSetSystemRoles()
throws Exception
{
String id = UUID.randomUUID().toString();
Map<String, String> response = inventoryServer.getPcmName(id);
String name = response.get("fqdn");
Set<String> roles = ImmutableSet.of(UUID.randomUUID().toString(), UUID.randomUUID().toString());
client.patchSystem(new InventorySystem(name).setPicInstance(id).setRoles(roles));
InventorySystem updated = client.getSystem(name);
Assert.assertEquals(updated.getRoles(), roles);
}
@Test(expectedExceptions = RuntimeException.class, expectedExceptionsMessageRegExp = "Request failed with code 500.*")
public void testSetSystemRolesForMissingSystem()
throws Exception
{
Set<String> roles = ImmutableSet.of(UUID.randomUUID().toString(), UUID.randomUUID().toString());
client.patchSystem(new InventorySystem(UUID.randomUUID().toString()).setPicInstance("").setRoles(roles));
}
@Test
public void testPcmSystemName()
throws Exception
{
String id = UUID.randomUUID().toString();
String name = client.getPcmSystemName(id);
// check get same value twice.
String nameAgain = client.getPcmSystemName(id);
Assert.assertEquals(name, nameAgain);
}
@Test
public void testAuthorizationEncoding()
{
Assert.assertEquals(InventoryClient.basicAuthEncode("user", "pass"), "Basic dXNlcjpwYXNz");
}
}