/******************************************************************************
* Copyright (c) 2012-2015 VMware, Inc. All Rights Reserved.
* 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.vmware.bdd.cli.rest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import com.vmware.bdd.cli.auth.LoginClient;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.vmware.bdd.apitypes.Connect;
import com.vmware.bdd.cli.auth.LoginClientImpl;
import com.vmware.bdd.cli.auth.LoginResponse;
import com.vmware.bdd.cli.commands.CookieCache;
/**
* Test case for RestClient
* Created By xiaoliangl on 8/27/14.
*/
@ContextConfiguration(locations = {"classpath:com/vmware/bdd/cli/command/tests/test-context.xml"})
@DirtiesContext( classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) // reset spring context after each test method.
public class RestClientTest extends AbstractTestNGSpringContextTests {
private static Object[][] DATA = null;
static {
ArrayList<Object[]> dataList = new ArrayList<>();
dataList.add(new Object[]{new LoginResponse(200, "JSESSIONID=B6926322AF4D8A8B9CEF3906D5735D41"), Connect.ConnectType.SUCCESS});
dataList.add(new Object[]{new LoginResponse(200, "JSESSIONID=B6926322AF4D8A8B9CEF3906D5735D41"), Connect.ConnectType.SUCCESS});
dataList.add(new Object[]{new LoginResponse(401, null), Connect.ConnectType.UNAUTHORIZATION});
dataList.add(new Object[]{new LoginResponse(500, null), Connect.ConnectType.ERROR});
dataList.add(new Object[]{new LoginResponse(200, null), Connect.ConnectType.ERROR});
dataList.add(new Object[]{new LoginResponse(302, null), Connect.ConnectType.ERROR});
DATA = new Object[dataList.size()][];
dataList.toArray(DATA);
}
@DataProvider(name = "RestClientTest.LoginDP")
public static Object[][] getTestData() {
return DATA;
}
@Autowired
private RestClient restClient;
@Autowired
private LoginClient loginClient;
@Test(dataProvider = "RestClientTest.LoginDP")
public void testLogin(LoginResponse loginResponse, Connect.ConnectType expectedConnectType) throws IOException {
Mockito.when(loginClient.login(Matchers.anyString(), Matchers.anyString(), Matchers.anyString())).thenReturn(
loginResponse);
Connect.ConnectType connectType = restClient.connect("127.0.0.1:8443", "root", "vmware");
Assert.assertEquals(connectType, expectedConnectType);
if(loginResponse.getSessionId() != null) {
Assert.assertEquals(loginResponse.getSessionId(), CookieCache.get(CookieCache.COOKIE));
}
}
@AfterMethod
public void tearDown() {
new File("cli.properties").delete();
CookieCache.clear();
}
@Test
public void testLoginWithException() throws IOException {
Mockito.when(loginClient.login(Matchers.anyString(), Matchers.anyString(), Matchers.anyString())).thenThrow(
new IOException("can't connect to network")
);
Connect.ConnectType connectType = restClient.connect("127.0.0.1:8443", "root", "vmware");
Assert.assertEquals(connectType, Connect.ConnectType.ERROR);
}
@Test
public void testRelogin() throws IOException {
Mockito.when(loginClient.login(Matchers.anyString(), Matchers.anyString(), Matchers.anyString())).thenReturn(
new LoginResponse(200, "JSESSIONID=B6926322AF4D8A8B9CEF3906D5735D41"));
Connect.ConnectType connectType = restClient.connect("127.0.0.1:8443", "root", "vmware");
Assert.assertEquals(connectType, Connect.ConnectType.SUCCESS);
Mockito.when(loginClient.login(Matchers.anyString(), Matchers.anyString(), Matchers.anyString())).thenReturn(
new LoginResponse(200, null));
connectType = restClient.connect("127.0.0.1:8443", "root", "vmware");
Assert.assertEquals(connectType, Connect.ConnectType.SUCCESS);
}
}