http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/383818c2/depends/libyarn/test/unit/TestContainerManagement.cpp ---------------------------------------------------------------------- diff --git a/depends/libyarn/test/unit/TestContainerManagement.cpp b/depends/libyarn/test/unit/TestContainerManagement.cpp deleted file mode 100644 index ffc3219..0000000 --- a/depends/libyarn/test/unit/TestContainerManagement.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#include "gtest/gtest.h" -#include "gmock/gmock.h" - -#include "libyarnclient/ContainerManagement.h" -#include "MockContainerManagementProtocol.h" -#include "TestContainerManagementStub.h" - -using std::map; -using std::string; -using std::list; -using namespace libyarn; -using namespace testing; -using namespace Mock; - -class MockContainerManagementStub: public TestContainerManagementStub { -public: - MOCK_METHOD0(getContainerManagementProtocol, ContainerManagementProtocol * ()); -}; - -TEST(TestContainerManagement,TestStartContainer){ - ContainerManagement client; - MockContainerManagementStub stub; - string nmHost("localhost"); - string nmPort("8032"); - string tokenService = ""; - Yarn::Config config; - Yarn::Internal::SessionConfig sessionConfig(config); - Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser(); - Yarn::Internal::RpcAuth rpcAuth(user, Yarn::Internal::AuthMethod::SIMPLE); - MockContainerManagementProtocol *protocol =new MockContainerManagementProtocol(nmHost,nmPort,tokenService,sessionConfig,rpcAuth); - - StringBytesMap map; - string key("key"); - string value("value"); - map.setKey(key); - map.setValue(value); - list<StringBytesMap> maps; - maps.push_back(map); - ContainerId containerId; - containerId.setId(501); - list<ContainerId> containerIds; - containerIds.push_back(containerId); - ContainerExceptionMap exceptionMap; - exceptionMap.setContainerId(containerId); - SerializedException exception; - string message("message"); - string trace("trace"); - string className("className"); - exception.setMessage(message); - exception.setTrace(trace); - exception.setClassName(className); - SerializedException cause; - string message2("message2"); - cause.setMessage(message2); - exception.setCause(cause); - exceptionMap.setSerializedException(exception); - list<ContainerExceptionMap> exceptionMaps; - exceptionMaps.push_back(exceptionMap); - StartContainersResponse response; - response.setServicesMetaData(maps); - response.setSucceededRequests(containerIds); - response.setFailedRequests(exceptionMaps); - EXPECT_CALL(*protocol, startContainers(_)).Times(AnyNumber()).WillOnce(Return(response)); - client.stub = &stub; - EXPECT_CALL(stub, getContainerManagementProtocol()).Times(AnyNumber()).WillOnce(Return(protocol)); - - Container container; - StartContainerRequest request; - libyarn::Token nmToken; - StartContainerResponse ret = client.startContainer(container,request,nmToken); - list<StringBytesMap>::iterator itMap = ret.getServicesMetaData().begin(); - //EXPECT_EQ(itMap->getKey(), "key"); - //EXPECT_EQ(itMap->getValue(), "value"); -} - -TEST(TestContainerManagement,TestStopContainer){ - ContainerManagement client; - MockContainerManagementStub stub; - string nmHost("localhost"); - string nmPort("8032"); - string tokenService = ""; - Yarn::Config config; - Yarn::Internal::SessionConfig sessionConfig(config); - Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser(); - Yarn::Internal::RpcAuth rpcAuth(user, Yarn::Internal::AuthMethod::SIMPLE); - MockContainerManagementProtocol *protocol =new MockContainerManagementProtocol(nmHost,nmPort,tokenService,sessionConfig,rpcAuth); - - StopContainersResponseProto stopResponseProto; - EXPECT_CALL(*protocol, stopContainers(_)).Times(AnyNumber()).WillOnce(Return(StopContainersResponse(stopResponseProto))); - client.stub = &stub; - EXPECT_CALL(stub, getContainerManagementProtocol()).Times(AnyNumber()).WillOnce(Return(protocol)); - - Container container; - libyarn::Token nmToken; - client.stopContainer(container,nmToken); -} - -TEST(TestContainerManagement,TestGetContainerStatus){ - ContainerManagement client; - MockContainerManagementStub stub; - string nmHost("localhost"); - string nmPort("8032"); - string tokenService = ""; - Yarn::Config config; - Yarn::Internal::SessionConfig sessionConfig(config); - Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser(); - Yarn::Internal::RpcAuth rpcAuth(user, Yarn::Internal::AuthMethod::SIMPLE); - MockContainerManagementProtocol *protocol =new MockContainerManagementProtocol(nmHost,nmPort,tokenService,sessionConfig,rpcAuth); - - GetContainerStatusesResponse getResponse; - ContainerId containerId; - containerId.setId(501); - ContainerStatus status; - status.setContainerId(containerId); - list<ContainerStatus> statuses; - statuses.push_back(status); - getResponse.setContainerStatuses(statuses); - EXPECT_CALL(*protocol, getContainerStatuses(_)).Times(AnyNumber()).WillOnce(Return(getResponse)); - client.stub = &stub; - EXPECT_CALL(stub, getContainerManagementProtocol()).Times(AnyNumber()).WillOnce(Return(protocol)); - - Container container; - libyarn::Token nmToken; - ContainerStatus retStatus = client.getContainerStatus(container,nmToken); - EXPECT_EQ(status.getContainerId().getId(), 501); -} -
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/383818c2/depends/libyarn/test/unit/TestLibYarnClient.cpp ---------------------------------------------------------------------- diff --git a/depends/libyarn/test/unit/TestLibYarnClient.cpp b/depends/libyarn/test/unit/TestLibYarnClient.cpp deleted file mode 100644 index f922b5b..0000000 --- a/depends/libyarn/test/unit/TestLibYarnClient.cpp +++ /dev/null @@ -1,651 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#include "gtest/gtest.h" -#include "gmock/gmock.h" -//#include "Thread.h" - -#include "libyarnclient/LibYarnClient.h" -#include "MockApplicationMaster.h" -#include "MockApplicationClient.h" -#include "MockContainerManagement.h" -#include "TestLibYarnClientStub.h" - -using std::string; -using std::list; -using std::set; -using namespace libyarn; -using namespace testing; -using namespace Mock; - -class MockLibYarnClientStub: public TestLibYarnClientStub { -public: - ~MockLibYarnClientStub(){ - } - MOCK_METHOD0(getApplicationClient, ApplicationClient* ()); - MOCK_METHOD0(getApplicationMaster, ApplicationMaster* ()); - MOCK_METHOD0(getContainerManagement, ContainerManagement* ()); -}; - -class TestLibYarnClient: public ::testing::Test { -public: - TestLibYarnClient(){ - amUser = "postgres"; - rmHost = "localhost"; - rmPort = "8032"; - schedHost = "localhost"; - schedPort = "8030"; - amHost = "localhost"; - amPort = 0; - am_tracking_url = "url"; - heartbeatInterval = 1000; - tokenService = ""; - user = Yarn::Internal::UserInfo::LocalUser(); - } - ~TestLibYarnClient(){ - } -protected: - string amUser; - string rmHost; - string rmPort; - string schedHost; - string schedPort; - string amHost; - int32_t amPort; - string am_tracking_url; - int heartbeatInterval; - string tokenService; - Yarn::Internal::UserInfo user; -}; - -static ResourceRequest BuildRequest(int requestContainer) { - ResourceRequest resRequest; - string host("*"); - resRequest.setResourceName(host); - Resource capability; - capability.setVirtualCores(1); - capability.setMemory(1024); - resRequest.setCapability(capability); - resRequest.setNumContainers(requestContainer); - resRequest.setRelaxLocality(true); - Priority priority; - priority.setPriority(1); - resRequest.setPriority(priority); - return resRequest; -} - -static list<ContainerReport> BuildContainerReportList(int containerSize){ - list<ContainerReport> containerReports; - for (int i = 0; i < containerSize; i++) { - ContainerReport report; - containerReports.push_back(report); - } - return containerReports; -} -static AllocateResponse BuildAllocateResponse(int containerNumber){ - AllocateResponse allocateResponse; - allocateResponse.setResponseId(10); - list<Container> containers; - for (int i=0;i<containerNumber;i++){ - Container container; - ContainerId containerId; - containerId.setId(i+1); - container.setId(containerId); - containers.push_back(container); - } - list<NMToken> nmTokens; - for (int i=0;i<containerNumber;i++){ - NMToken token; - nmTokens.push_back(token); - } - allocateResponse.setAllocatedContainers(containers); - allocateResponse.setNMTokens(nmTokens); - return allocateResponse; -} - -static ApplicationReport BuildApplicationReport(string passwordStr,YarnApplicationState state){ - ApplicationReport applicationReport; - libyarn::Token token; - string password(passwordStr); - token.setPassword(password); - applicationReport.setAMRMToken(token); - applicationReport.setYarnApplicationState(state); - return applicationReport; -} - -static ApplicationID BuildApplicationID(int id){ - ApplicationID appId; - appId.setId(id); - return appId; -} - -static RegisterApplicationMasterResponse BuildRegisterResponse(){ - RegisterApplicationMasterResponseProto responseProto; - return RegisterApplicationMasterResponse(responseProto); -} - -static StartContainerResponse BuildStartContainerResponse(){ - StartContainerResponseProto responseProto; - return StartContainerResponse(responseProto); -} - -static ContainerStatus BuildContainerStatus(int id){ - ContainerId containerId; - containerId.setId(id); - ContainerStatus containerStatus; - containerStatus.setContainerId(containerId); - return containerStatus; -} - -static QueueInfo BuildQueueinfo(string queue,float capcity,int childNum){ - QueueInfo queueInfo; - queueInfo.setQueueName(queue); - queueInfo.setCurrentCapacity(capcity); - - list<QueueInfo> childQueues; - for (int i=0;i<childNum;i++){ - QueueInfo childQueue; - string childName("child"); - childQueue.setQueueName(childName); - childQueue.setCurrentCapacity(capcity); - childQueues.push_back(childQueue); - } - queueInfo.setChildQueues(childQueues); - return queueInfo; - -} - -TEST_F(TestLibYarnClient,TestCreateJob){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL(*appclient, getNewApplication()).Times(AnyNumber()).WillOnce(Return(BuildApplicationID(1))); - EXPECT_CALL((*appclient),submitApplication(_)).Times(AnyNumber()).WillOnce(Return()); - EXPECT_CALL((*appclient),getApplicationReport(_)).Times(AtLeast(3)) - .WillOnce(Return(BuildApplicationReport("",YarnApplicationState::FAILED))) - .WillOnce(Return(BuildApplicationReport("",YarnApplicationState::ACCEPTED))) - .WillRepeatedly(Return(BuildApplicationReport("pass",YarnApplicationState::ACCEPTED))); - - EXPECT_CALL((*amrmclient),registerApplicationMaster(_,_,_)).Times(AnyNumber()).WillRepeatedly(Return(BuildRegisterResponse())); - EXPECT_CALL((*amrmclient),allocate(_,_,_,_,_)).Times(AnyNumber()).WillRepeatedly(Return(BuildAllocateResponse(0))); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval, &stub); - string jobName("libyarn"); - string queue("default"); - string jobId(""); - int result = client.createJob(jobName,queue,jobId); - EXPECT_EQ(result, 0); -} - -TEST_F(TestLibYarnClient,TestCreateJobException){ - MockApplicationClient *appclient = new MockApplicationClient(amUser, rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL(*appclient, getNewApplication()).Times(AnyNumber()).WillOnce(Return(BuildApplicationID(1))); - EXPECT_CALL((*appclient),submitApplication(_)).Times(AnyNumber()) - .WillOnce(Throw(std::invalid_argument("Exist an application for the client"))); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - string jobName("libyarn"); - string queue("default"); - string jobId(""); - int result = client.createJob(jobName,queue,jobId); - EXPECT_EQ(result, 1); -} - -TEST_F(TestLibYarnClient,TestCreateJobInvalidId){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - string jobName("libyarn"); - string queue("default"); - string jobId("test"); - int result = client.createJob(jobName,queue,jobId); - EXPECT_EQ(result,1); -} - -TEST_F(TestLibYarnClient,TestAddResourceRequest){ - MockLibYarnClientStub stub; - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, - amPort, am_tracking_url, heartbeatInterval, &stub); - - Resource resource; - resource.setMemory(1024); - resource.setVirtualCores(1); - string host("master"); - client.addResourceRequest(resource, 10, host, 1, true); - list<ResourceRequest> request = client.getAskRequests(); - EXPECT_EQ(request.size(), 1); - list<ResourceRequest>::iterator it = request.begin(); - EXPECT_EQ(it->getPriority().getPriority(), 1); - EXPECT_EQ(it->getNumContainers(), 10); - EXPECT_EQ(it->getRelaxLocality(), true); - EXPECT_EQ(it->getResourceName(), host); -} - -TEST_F(TestLibYarnClient,TestaddContainerRequests) { - MockLibYarnClientStub stub; - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, - amPort, am_tracking_url, heartbeatInterval, &stub); - string jobId(""); - Resource resource; - resource.setMemory(1024); - resource.setVirtualCores(1); - list<struct LibYarnNodeInfo> preferred; - int ret = client.addContainerRequests(jobId, resource, 8, preferred, 1, true); - EXPECT_EQ(ret, 0); - list<ResourceRequest> request = client.getAskRequests(); - list<ResourceRequest>::iterator it = request.begin(); - EXPECT_EQ(it->getPriority().getPriority(), 1); - EXPECT_EQ(it->getNumContainers(), 8); - EXPECT_EQ(it->getRelaxLocality(), true); - EXPECT_EQ(it->getResourceName(), "*"); - client.clearAskRequests(); - EXPECT_EQ(client.getAskRequests().size(), 0); - - /* test preferred hosts */ - LibYarnNodeInfo info1("node1", NULL, 3); - LibYarnNodeInfo info2("node2", NULL, 2); - preferred.push_back(info1); - preferred.push_back(info2); - ret = client.addContainerRequests(jobId, resource, 8, preferred, 1, false); - request = client.getAskRequests(); - for (it = request.begin(); it != request.end(); ++it) { - if (it->getResourceName() == info1.getHost()) { - EXPECT_EQ(it->getNumContainers(), 3); - EXPECT_EQ(it->getRelaxLocality(), true); - } else if (it->getResourceName() == info2.getHost()) { - EXPECT_EQ(it->getNumContainers(), 2); - EXPECT_EQ(it->getRelaxLocality(), true); - } else if (it->getResourceName() == string("/default-rack")) { - EXPECT_EQ(it->getNumContainers(), 5); - EXPECT_EQ(it->getRelaxLocality(), false); - } else if (it->getResourceName() == string("*")) { - EXPECT_EQ(it->getNumContainers(), 8); - EXPECT_EQ(it->getRelaxLocality(), false); - } else { - ASSERT_TRUE(false); - } - EXPECT_EQ(it->getCapability().getMemory(), 1024); - EXPECT_EQ(it->getCapability().getVirtualCores(), 1); - } -} - -TEST_F(TestLibYarnClient,TestAllocateResources){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL((*amrmclient),allocate(_,_,_,_,_)).Times(AnyNumber()).WillRepeatedly(Return(BuildAllocateResponse(5))); - EXPECT_CALL((*appclient),getContainers(_)).Times(AnyNumber()) - .WillRepeatedly(Return(BuildContainerReportList(0))); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - string jobId(""); - list<string> blackListAdditions; - list<string> blackListRemovals; - ResourceRequest resRequest; - list<Container> allocatedResourcesArray; - int result; - - result = client.allocateResources(jobId, blackListAdditions, blackListRemovals,allocatedResourcesArray,5); - EXPECT_EQ(allocatedResourcesArray.size(), 5); - EXPECT_EQ(result,0); -} - -TEST_F(TestLibYarnClient,TestAllocateResourcesRetry){ - MockApplicationClient *appclient = new MockApplicationClient(amUser, rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL((*appclient),getContainers(_)).Times(AnyNumber()) - .WillRepeatedly(Return(BuildContainerReportList(0))); - EXPECT_CALL((*amrmclient),allocate(_,_,_,_,_)).Times(AnyNumber()) - .WillOnce(Return(BuildAllocateResponse(5))) - .WillOnce(Return(BuildAllocateResponse(5))) - .WillRepeatedly(Return(BuildAllocateResponse(0))); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - - LibYarnClient client(amUser,rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - string jobId(""); - list<string> blackListAdditions; - list<string> blackListRemovals; - ResourceRequest resRequest; - list<Container> allocatedResourcesArray; - int result; - resRequest = BuildRequest(11); - result = client.allocateResources(jobId, blackListAdditions, blackListRemovals, allocatedResourcesArray, 2); - EXPECT_EQ(result,0); -} - -TEST_F(TestLibYarnClient,TestActiveResources){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - - LibYarnClient client(amUser,rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - string jobId(""); - int activeContainerSize = 3; - int64_t activeContainerIds[activeContainerSize]; - for (int i = 0;i < activeContainerSize;i++){ - activeContainerIds[i] = i; - } - int result = client.activeResources(jobId,activeContainerIds,activeContainerSize); - EXPECT_EQ(result,0); -} - - -TEST_F(TestLibYarnClient,TestReleaseResources){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL((*amrmclient),allocate(_,_,_,_,_)).Times(AnyNumber()).WillRepeatedly(Return(BuildAllocateResponse(5))); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - string jobId(""); - int releaseContainerSize = 3; - int64_t releaseContainerIds[releaseContainerSize]; - for (int i = 0;i < releaseContainerSize;i++){ - releaseContainerIds[i] = i; - } - int result = client.releaseResources(jobId,releaseContainerIds,releaseContainerSize); - EXPECT_EQ(result,0); -} - -TEST_F(TestLibYarnClient,TestFinishJob){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL((*amrmclient),finishApplicationMaster(_,_,_)).Times(AnyNumber()).WillRepeatedly(Return(true)); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - string jobId(""); - int result = client.finishJob(jobId,FinalApplicationStatus::APP_SUCCEEDED); - EXPECT_EQ(result,0); -} - -TEST_F(TestLibYarnClient,TestGetApplicationReport){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL((*appclient),getApplicationReport(_)).Times(AnyNumber()) - .WillRepeatedly(Return(BuildApplicationReport("pass",YarnApplicationState::ACCEPTED))); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - string jobId(""); - ApplicationReport applicationReport; - int result = client.getApplicationReport(jobId,applicationReport); - EXPECT_EQ(result,0); -} - -TEST_F(TestLibYarnClient,TestGetContainerReports){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - int containerSize = 3; - EXPECT_CALL((*appclient),getContainers(_)).Times(AnyNumber()) - .WillRepeatedly(Return(BuildContainerReportList(containerSize))); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - string jobId(""); - list<ContainerReport> reports; - int result = client.getContainerReports(jobId,reports); - EXPECT_EQ(result,0); - EXPECT_EQ(int(reports.size()),containerSize); -} - -TEST_F(TestLibYarnClient,TestGetContainerStatuses){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - string jobId(""); - list<ContainerStatus> containerStatues; - int containerSize = 3; - int64_t containerIds[containerSize]; - for (int i = 0;i < containerSize;i++){ - containerIds[i] = i; - } - int result = client.getContainerStatuses(jobId,containerIds,containerSize,containerStatues); - EXPECT_EQ(result,0); - EXPECT_EQ(int(containerStatues.size()),0); -} - -TEST_F(TestLibYarnClient,TestGetQueueInfo){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - string queue("test"); - int childNum = 2; - float capcity = 0.5; - QueueInfo queueInfo = BuildQueueinfo(queue,capcity,childNum); - EXPECT_CALL((*appclient),getQueueInfo(_,_,_,_)).Times(AnyNumber()) - .WillRepeatedly(Return(queueInfo)); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - - QueueInfo resultQueue; - int result = client.getQueueInfo(queue,true,true,true,resultQueue); - EXPECT_EQ(result,0); - EXPECT_EQ(resultQueue.getCurrentCapacity(),capcity); - EXPECT_STREQ(resultQueue.getQueueName().c_str(),queue.c_str()); - EXPECT_EQ(int(resultQueue.getChildQueues().size()),childNum); -} - -TEST_F(TestLibYarnClient,TestGetClusterNodes){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - list<NodeReport> nodeReports; - int nodeSize = 3; - for (int i=0;i<nodeSize;i++){ - NodeReport report; - nodeReports.push_back(report); - } - EXPECT_CALL((*appclient),getClusterNodes(_)).Times(AnyNumber()) - .WillRepeatedly(Return(nodeReports)); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - - list<NodeState> states; - list<NodeReport> nodeResult; - int result = client.getClusterNodes(states,nodeResult); - EXPECT_EQ(result,0); - EXPECT_EQ(int(nodeResult.size()),nodeSize); -} - -TEST_F(TestLibYarnClient,TestGetErrorMessage){ - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval); - EXPECT_STREQ("",client.getErrorMessage().c_str()); - client.setErrorMessage("error!"); - EXPECT_STREQ("error!",client.getErrorMessage().c_str()); -} - -TEST_F(TestLibYarnClient,TestGetActiveFailContainerIds){ - LibYarnClient client(amUser, rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval); - set<int64_t> activeFailIds; - client.getActiveFailContainerIds(activeFailIds); - EXPECT_EQ(int(activeFailIds.size()),0); -} - -TEST_F(TestLibYarnClient,TestLibYarn){ - MockApplicationClient *appclient = new MockApplicationClient(amUser,rmHost,rmHost); - MockApplicationMaster *amrmclient = new MockApplicationMaster(schedHost,schedPort,user,tokenService); - MockContainerManagement *nmclient = new MockContainerManagement(); - MockLibYarnClientStub stub; - - EXPECT_CALL(*appclient, getNewApplication()).Times(AnyNumber()).WillOnce(Return(BuildApplicationID(1))); - EXPECT_CALL((*appclient),submitApplication(_)).Times(AnyNumber()).WillOnce(Return()); - EXPECT_CALL((*appclient),getApplicationReport(_)).Times(AtLeast(3)) - .WillOnce(Return(BuildApplicationReport("",YarnApplicationState::FAILED))) - .WillOnce(Return(BuildApplicationReport("",YarnApplicationState::ACCEPTED))) - .WillRepeatedly(Return(BuildApplicationReport("pass",YarnApplicationState::ACCEPTED))); - EXPECT_CALL((*appclient),getContainers(_)).Times(AnyNumber()) - .WillRepeatedly(Return(BuildContainerReportList(0))); - - EXPECT_CALL((*amrmclient),registerApplicationMaster(_,_,_)).Times(AnyNumber()).WillRepeatedly(Return(BuildRegisterResponse())); - EXPECT_CALL((*amrmclient),allocate(_,_,_,_,_)).Times(AnyNumber()).WillRepeatedly(Return(BuildAllocateResponse(5))); - EXPECT_CALL((*amrmclient),finishApplicationMaster(_,_,_)).Times(AnyNumber()).WillRepeatedly(Return(true)); - - EXPECT_CALL((*nmclient),startContainer(_,_,_)).Times(AnyNumber()) - .WillOnce(Throw(std::invalid_argument("startContainer Exception"))) - .WillRepeatedly(Return(BuildStartContainerResponse())); - EXPECT_CALL((*nmclient),getContainerStatus(_,_)).Times(AnyNumber()) - .WillOnce(Return(BuildContainerStatus(2))) - .WillOnce(Return(BuildContainerStatus(3))) - .WillRepeatedly(Return(BuildContainerStatus(0))); - EXPECT_CALL((*nmclient),stopContainer(_,_)).Times(AnyNumber()) - .WillRepeatedly(Return()); - - EXPECT_CALL(stub, getApplicationClient()).Times(AnyNumber()).WillOnce(Return(appclient)); - EXPECT_CALL(stub, getApplicationMaster()).Times(AnyNumber()).WillOnce(Return(amrmclient)); - EXPECT_CALL(stub, getContainerManagement()).Times(AnyNumber()).WillOnce(Return(nmclient)); - - LibYarnClient client(amUser,rmHost, rmPort, schedHost, schedPort, amHost, amPort, am_tracking_url,heartbeatInterval,&stub); - string jobName("libyarn"); - string queue("default"); - string jobId(""); - int result = client.createJob(jobName,queue,jobId); - EXPECT_EQ(result,0); - - list<string> blackListAdditions; - list<string> blackListRemovals; - ResourceRequest resRequest; - list<Container> allocatedResourcesArray; - - resRequest = BuildRequest(3); - result = client.allocateResources(jobId, blackListAdditions, blackListRemovals,allocatedResourcesArray,5); - EXPECT_EQ(result,0); - - int allocatedResourceArraySize = allocatedResourcesArray.size(); - int64_t activeContainerIds[allocatedResourceArraySize]; - int64_t releaseContainerIds[allocatedResourceArraySize]; - int64_t statusContainerIds[allocatedResourceArraySize]; - int i = 0; - for (list<Container>::iterator it = allocatedResourcesArray.begin();it != allocatedResourcesArray.end();it++){ - activeContainerIds[i] = it->getId().getId(); - if (i != 1){ - releaseContainerIds[i] = it->getId().getId(); - } - statusContainerIds[i] = it->getId().getId(); - i++; - } - result = client.activeResources(jobId, activeContainerIds,allocatedResourceArraySize); - EXPECT_EQ(result,0); - - set<int64_t> activeFailIds; - result = client.getActiveFailContainerIds(activeFailIds); - EXPECT_EQ(result,0); - EXPECT_EQ(int(activeFailIds.size()),1); - - ApplicationReport report; - result = client.getApplicationReport(jobId,report); - EXPECT_EQ(result,0); - - list<ContainerStatus> containerStatues; - result = client.getContainerStatuses(jobId,statusContainerIds,allocatedResourceArraySize,containerStatues); - EXPECT_EQ(result,0); - //EXPECT_EQ(int(containerStatues.size()),2); - - result = client.releaseResources(jobId, releaseContainerIds,allocatedResourceArraySize); - EXPECT_EQ(result,0); - - - result = client.finishJob(jobId, FinalApplicationStatus::APP_SUCCEEDED); - EXPECT_EQ(result,0); -} - http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/383818c2/depends/libyarn/test/unit/TestLibYarnClient/TestApplicationClient.cpp ---------------------------------------------------------------------- diff --git a/depends/libyarn/test/unit/TestLibYarnClient/TestApplicationClient.cpp b/depends/libyarn/test/unit/TestLibYarnClient/TestApplicationClient.cpp new file mode 100644 index 0000000..b02223c --- /dev/null +++ b/depends/libyarn/test/unit/TestLibYarnClient/TestApplicationClient.cpp @@ -0,0 +1,277 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +#include <list> +#include <string> + +#include "gtest/gtest.h" +#include "gmock/gmock.h" + +#include "libyarnclient/ApplicationClient.h" +#include "MockApplicationClientProtocol.h" + +using std::string; +using std::list; +using namespace libyarn; +using namespace testing; +using namespace Mock; + +class TestApplicationClient: public ::testing::Test { +public: + TestApplicationClient(){ + string user("postgres"); + string rmHost("localhost"); + string rmPort("8032"); + string tokenService = ""; + Yarn::Config config; + Yarn::Internal::SessionConfig sessionConfig(config); + MockApplicationClientProtocol *protocol = new MockApplicationClientProtocol(user,rmHost,rmPort,tokenService, sessionConfig); + + ApplicationId appId; + appId.setId(100); + appId.setClusterTimestamp(1454307175682); + GetNewApplicationResponse getNewApplicationResponse; + getNewApplicationResponse.setApplicationId(appId); + EXPECT_CALL((*protocol),getNewApplication(_)).Times(AnyNumber()).WillOnce(Return(getNewApplicationResponse)); + EXPECT_CALL((*protocol),submitApplication(_)).Times(AnyNumber()).WillOnce(Return()); + + ApplicationReport appReport; + appReport.setApplicationId(appId); + appReport.setUser(user); + string queue("default"); + string appName("hawq"); + string hostname("master"); + appReport.setQueue(queue); + appReport.setName(appName); + appReport.setHost(hostname); + appReport.setRpcPort(8090); + appReport.setProgress(0.5); + GetApplicationReportResponse appReportResponse; + appReportResponse.setApplicationReport(appReport); + EXPECT_CALL((*protocol),getApplicationReport(_)).Times(AnyNumber()).WillOnce(Return(appReportResponse)); + + ContainerId containerId; + containerId.setId(501); + containerId.setApplicationId(appId); + Resource resource; + resource.setMemory(1024); + resource.setVirtualCores(1); + Priority priority; + priority.setPriority(1); + ContainerReport report; + report.setId(containerId); + report.setResource(resource); + report.setPriority(priority); + list<ContainerReport> reportList; + reportList.push_back(report); + GetContainersResponse getContainersResponse; + getContainersResponse.setContainersReportList(reportList); + EXPECT_CALL((*protocol),getContainers(_)).Times(AnyNumber()).WillOnce(Return(getContainersResponse)); + + NodeId nodeId; + string nodeHost("node1"); + nodeId.setHost(nodeHost); + nodeId.setPort(9983); + NodeReport nodeReport; + nodeReport.setNodeId(nodeId); + string rackName("default-rack"); + nodeReport.setRackName(rackName); + nodeReport.setNumContainers(8); + Resource nodeResource; + nodeResource.setMemory(2048*8); + nodeResource.setVirtualCores(8); + nodeReport.setResourceCapablity(nodeResource); + nodeReport.setNodeState(NodeState::NS_RUNNING); + list<NodeReport> nodeReportList; + nodeReportList.push_back(nodeReport); + GetClusterNodesResponse getClusterNodesResponse; + getClusterNodesResponse.setNodeReports(nodeReportList); + EXPECT_CALL((*protocol),getClusterNodes(_)).Times(AnyNumber()).WillOnce(Return(getClusterNodesResponse)); + + QueueInfo queueInfo; + queueInfo.setQueueName(queue); + queueInfo.setCapacity(0.67); + queueInfo.setMaximumCapacity(0.95); + queueInfo.setCurrentCapacity(0.5); + queueInfo.setQueueState(QueueState::Q_RUNNING); + QueueInfo childQueue; + string childQueueName("hawq-queue"); + childQueue.setQueueName(childQueueName); + childQueue.setCapacity(0.33); + childQueue.setMaximumCapacity(0.5); + childQueue.setCurrentCapacity(0.25); + list<QueueInfo> childQueueList; + childQueueList.push_back(childQueue); + queueInfo.setChildQueues(childQueueList); + list<ApplicationReport> appReportList; + appReportList.push_back(appReport); + queueInfo.setApplicationReports(appReportList); + GetQueueInfoResponse getQueueInfoResponse; + getQueueInfoResponse.setQueueInfo(queueInfo); + EXPECT_CALL((*protocol),getQueueInfo(_)).Times(AnyNumber()).WillOnce(Return(getQueueInfoResponse)); + + KillApplicationResponseProto killApplicationResponseProto; + EXPECT_CALL((*protocol),forceKillApplication(_)).Times(AnyNumber()).WillOnce(Return(KillApplicationResponse(killApplicationResponseProto))); + + YarnClusterMetrics metrics; + metrics.setNumNodeManagers(10); + GetClusterMetricsResponse clusterMetricsResponse; + clusterMetricsResponse.setClusterMetrics(metrics); + EXPECT_CALL((*protocol),getClusterMetrics(_)).Times(AnyNumber()).WillOnce(Return(clusterMetricsResponse)); + + GetApplicationsResponse applicationsResponse; + applicationsResponse.setApplicationList(appReportList); + EXPECT_CALL((*protocol),getApplications(_)).Times(AnyNumber()).WillOnce(Return(applicationsResponse)); + + QueueUserACLInfo aclInfo; + aclInfo.setQueueName(queue); + list<QueueACL> queueACLList; + QueueACL acl1 = QueueACL::QACL_ADMINISTER_QUEUE; + QueueACL acl2 = QueueACL::QACL_SUBMIT_APPLICATIONS; + queueACLList.push_back(acl1); + queueACLList.push_back(acl2); + aclInfo.setUserAcls(queueACLList); + list<QueueUserACLInfo> aclInfoList; + aclInfoList.push_back(aclInfo); + GetQueueUserAclsInfoResponse queueUserAclsInfoResponse; + queueUserAclsInfoResponse.setUserAclsInfoList(aclInfoList); + EXPECT_CALL((*protocol),getQueueAclsInfo(_)).Times(AnyNumber()).WillOnce(Return(queueUserAclsInfoResponse)); + + client = new ApplicationClient(protocol); + } + + ~TestApplicationClient(){ + delete client; + } + +protected: + ApplicationClient *client; +}; + +TEST_F(TestApplicationClient, TestGetNewApplication){ + ApplicationId response = client->getNewApplication(); + EXPECT_EQ(response.getId(), 100); + EXPECT_EQ(response.getClusterTimestamp(), 1454307175682); +} + +TEST_F(TestApplicationClient,TestSubmitApplication){ + ApplicationSubmissionContext appContext; + client->submitApplication(appContext); +} + +TEST_F(TestApplicationClient,TestGetApplicationReport){ + ApplicationId appId; + ApplicationReport report = client->getApplicationReport(appId); + EXPECT_EQ(report.getUser(), "postgres"); + EXPECT_EQ(report.getQueue(), "default"); + EXPECT_EQ(report.getName(), "hawq"); + EXPECT_EQ(report.getHost(), "master"); + EXPECT_EQ(report.getRpcPort(), 8090); + EXPECT_FLOAT_EQ(report.getProgress(), 0.5); +} + +TEST_F(TestApplicationClient,TestGetContainers){ + ApplicationAttemptId appAttempId; + list<ContainerReport> reports = client->getContainers(appAttempId); + EXPECT_EQ(reports.size(), 1); + list<ContainerReport>::iterator it = reports.begin(); + EXPECT_EQ(it->getId().getId(), 501); + EXPECT_EQ(it->getPriority().getPriority(), 1); + EXPECT_EQ(it->getResource().getMemory(), 1024); + EXPECT_EQ(it->getResource().getVirtualCores(), 1); +} + +TEST_F(TestApplicationClient,TestGetClusterNodes){ + list<NodeState> states; + list<NodeReport> reports = client->getClusterNodes(states); + EXPECT_EQ(reports.size(), 1); + list<NodeReport>::iterator it = reports.begin(); + EXPECT_EQ(it->getNodeId().getHost(), "node1"); + EXPECT_EQ(it->getNodeId().getPort(), 9983); + EXPECT_EQ(it->getRackName(), "default-rack"); + EXPECT_EQ(it->getResourceCapability().getMemory(), 2048*8); + EXPECT_EQ(it->getResourceCapability().getVirtualCores(), 8); + EXPECT_EQ(it->getNodeState(), NodeState::NS_RUNNING); + EXPECT_EQ(it->getNumContainers(), 8); +} + +TEST_F(TestApplicationClient,TestGetQueueInfo){ + string queue = ""; + QueueInfo queueInfo = client->getQueueInfo(queue,true,true,true); + EXPECT_EQ(queueInfo.getQueueName(), "default"); + EXPECT_FLOAT_EQ(queueInfo.getCapacity(), 0.67); + EXPECT_FLOAT_EQ(queueInfo.getMaximumCapacity(), 0.95); + EXPECT_FLOAT_EQ(queueInfo.getCurrentCapacity(), 0.5); + EXPECT_EQ(queueInfo.getQueueState(), QueueState::Q_RUNNING); + list<QueueInfo> child = queueInfo.getChildQueues(); + EXPECT_EQ(child.size(), 1); + list<QueueInfo>::iterator it = child.begin(); + EXPECT_EQ(it->getQueueName(), "hawq-queue"); + EXPECT_FLOAT_EQ(it->getCapacity(), 0.33); + EXPECT_FLOAT_EQ(it->getMaximumCapacity(), 0.5); + EXPECT_FLOAT_EQ(it->getCurrentCapacity(), 0.25); + list<ApplicationReport> appReportList = queueInfo.getApplicationReports(); + list<ApplicationReport>::iterator itAppReport = appReportList.begin(); + EXPECT_EQ(itAppReport->getApplicationId().getId(), 100); + EXPECT_EQ(itAppReport->getUser(), "postgres"); +} + +TEST_F(TestApplicationClient,TestForceKillApplication){ + ApplicationId appId; + client->forceKillApplication(appId); +} + +TEST_F(TestApplicationClient,TestGetClusterMetrics){ + YarnClusterMetrics response = client->getClusterMetrics(); + EXPECT_EQ(response.getNumNodeManagers(), 10); +} + +TEST_F(TestApplicationClient,TestGetApplications){ + list<string> applicationTypes; + list<YarnApplicationState> applicationStates; + list<ApplicationReport> reports = client->getApplications(applicationTypes,applicationStates); + EXPECT_EQ(reports.size(), 1); + list<ApplicationReport>::iterator it = reports.begin(); + EXPECT_EQ(it->getApplicationId().getId(), 100); + EXPECT_EQ(it->getUser(), "postgres"); +} + +TEST_F(TestApplicationClient,TestGetQueueAclsInfo){ + list<QueueUserACLInfo> response = client->getQueueAclsInfo(); + EXPECT_EQ(response.size(), 1); + list<QueueUserACLInfo>::iterator it = response.begin(); + EXPECT_EQ(it->getQueueName(), "default"); + list<QueueACL> queueACLs = it->getUserAcls(); + EXPECT_EQ(queueACLs.size(), 2); + list<QueueACL>::iterator queueACL = queueACLs.begin(); + EXPECT_EQ(*queueACL, QueueACL::QACL_ADMINISTER_QUEUE); + *queueACL++; + EXPECT_EQ(*queueACL, QueueACL::QACL_SUBMIT_APPLICATIONS); +} + +TEST_F(TestApplicationClient, TestRMInfo){ + string rmHost("localhost"); + string rmPort("8032"); + + RMInfo rmInfo = RMInfo(); + rmInfo.setHost(rmHost); + rmInfo.setPort(rmPort); + EXPECT_EQ(rmInfo.getHost(), rmHost); + EXPECT_EQ(rmInfo.getPort(), rmPort); +} http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/383818c2/depends/libyarn/test/unit/TestLibYarnClient/TestApplicationMaster.cpp ---------------------------------------------------------------------- diff --git a/depends/libyarn/test/unit/TestLibYarnClient/TestApplicationMaster.cpp b/depends/libyarn/test/unit/TestLibYarnClient/TestApplicationMaster.cpp new file mode 100644 index 0000000..18969af --- /dev/null +++ b/depends/libyarn/test/unit/TestLibYarnClient/TestApplicationMaster.cpp @@ -0,0 +1,196 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +#include <list> +#include <string> + +#include "gtest/gtest.h" +#include "gmock/gmock.h" + +#include "libyarnclient/ApplicationMaster.h" +#include "MockApplicationMasterProtocol.h" + +using std::string; +using std::list; +using namespace libyarn; +using namespace testing; +using namespace Mock; + +class TestApplicationMaster: public ::testing::Test { +public: + TestApplicationMaster(){ + string schedHost("localhost"); + string schedPort("8032"); + string tokenService = ""; + Yarn::Config config; + Yarn::Internal::SessionConfig sessionConfig(config); + Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser(); + Yarn::Internal::RpcAuth rpcAuth(user, Yarn::Internal::AuthMethod::SIMPLE); + protocol = new MockApplicationMasterProtocol(schedHost,schedPort,tokenService, sessionConfig,rpcAuth); + client = new ApplicationMaster(protocol); + } + ~TestApplicationMaster(){ + delete client; + } + +protected: + MockApplicationMasterProtocol *protocol; + ApplicationMaster *client; +}; + +TEST_F(TestApplicationMaster,TestRegisterApplicationMaster){ + Resource resource; + resource.setMemory(1024*8*10); + resource.setVirtualCores(1*8*10); + string key("tokenkey"); + ApplicationACLMap aclMap; + aclMap.setAccessType(ApplicationAccessType::APPACCESS_VIEW_APP); + string acl("acl"); + aclMap.setAcl(acl); + list<ApplicationACLMap> aclMapList; + aclMapList.push_back(aclMap); + RegisterApplicationMasterResponse response; + response.setMaximumResourceCapability(resource); + response.setClientToAMTokenMasterKey(key); + response.setApplicationACLs(aclMapList); + EXPECT_CALL((*protocol),registerApplicationMaster(_)).Times(AnyNumber()).WillOnce(Return(response)); + + string amHost("localhost"); + int amPort = 8032; + string am_tracking_url = ""; + RegisterApplicationMasterResponse retResponse = client->registerApplicationMaster(amHost,amPort,am_tracking_url); + EXPECT_EQ(retResponse.getClientToAMTokenMasterKey(), "tokenkey"); + Resource retResource = retResponse.getMaximumResourceCapability(); + EXPECT_EQ(retResource.getMemory(), 1024*8*10); + EXPECT_EQ(retResource.getVirtualCores(), 1*8*10); + list<ApplicationACLMap> retAclMapList = retResponse.getApplicationACLs(); + EXPECT_EQ(retAclMapList.size(), 1); + list<ApplicationACLMap>::iterator it = retAclMapList.begin(); + EXPECT_EQ(it->getAccessType(), ApplicationAccessType::APPACCESS_VIEW_APP); + EXPECT_EQ(it->getAcl(), "acl"); +} + +TEST_F(TestApplicationMaster,TestAllocate){ + Resource resource; + resource.setMemory(1024*8*10); + resource.setVirtualCores(1*8*10); + AllocateResponse allocateResponse; + allocateResponse.setAMCommand(AMCommand::AM_RESYNC); + allocateResponse.setResponseId(100); + list<Container> containers; + Container container; + ContainerId containerId; + containerId.setId(501); + container.setId(containerId); + NodeId nodeId; + string nodeHost("node1"); + nodeId.setHost(nodeHost); + nodeId.setPort(9983); + container.setNodeId(nodeId); + string address("http://address"); + container.setNodeHttpAddress(address); + container.setResource(resource); + Priority priority; + priority.setPriority(1); + container.setPriority(priority); + libyarn::Token token; + string identifier("identifier"); + token.setIdentifier(identifier); + string password("password"); + token.setPassword(password); + string kind("kind"); + token.setKind(kind); + string service("service"); + token.setService(service); + container.setContainerToken(token); + containers.push_back(container); + allocateResponse.setAllocatedContainers(containers); + ContainerStatus containerStatus; + containerStatus.setContainerId(containerId); + containerStatus.setContainerState(ContainerState::C_RUNNING); + string diagnostics("diagnostics"); + containerStatus.setDiagnostics(diagnostics); + containerStatus.setExitStatus(-1000); + list<ContainerStatus> statuses; + statuses.push_back(containerStatus); + allocateResponse.setCompletedContainerStatuses(statuses); + allocateResponse.setResourceLimit(resource); + NodeReport nodeReport; + nodeReport.setNodeId(nodeId); + string rackName("default-rack"); + nodeReport.setRackName(rackName); + nodeReport.setNumContainers(8); + list<NodeReport> nodeReports; + nodeReports.push_back(nodeReport); + allocateResponse.setUpdatedNodes(nodeReports); + allocateResponse.setNumClusterNodes(12); + NMToken nmToken; + nmToken.setNodeId(nodeId); + nmToken.setToken(token); + list<NMToken> nmTokens; + nmTokens.push_back(nmToken); + allocateResponse.setNMTokens(nmTokens); + EXPECT_CALL((*protocol),allocate(_)).Times(AnyNumber()).WillOnce(Return(allocateResponse)); + + list<ResourceRequest> asks; + list<ContainerId> releases; + ResourceBlacklistRequest blacklistRequest; + int32_t responseId; + float progress = 5; + AllocateResponse retResponse = client->allocate(asks,releases,blacklistRequest,responseId,progress); + EXPECT_EQ(retResponse.getAMCommand(), AMCommand::AM_RESYNC); + EXPECT_EQ(retResponse.getResponseId(), 100); + list<Container> retContainers = retResponse.getAllocatedContainers(); + list<Container>::iterator it = retContainers.begin(); + EXPECT_EQ(it->getId().getId(), 501); + EXPECT_EQ(it->getNodeId().getHost(), "node1"); + EXPECT_EQ(it->getNodeId().getPort(), 9983); + EXPECT_EQ(it->getNodeHttpAddress(), "http://address"); + EXPECT_EQ(it->getPriority().getPriority(), 1); + EXPECT_EQ(it->getResource().getMemory(), 1024*8*10); + EXPECT_EQ(it->getResource().getVirtualCores(), 1*8*10); + EXPECT_EQ(it->getContainerToken().getIdentifier(), "identifier"); + EXPECT_EQ(it->getContainerToken().getPassword(), "password"); + EXPECT_EQ(it->getContainerToken().getKind(), "kind"); + EXPECT_EQ(it->getContainerToken().getService(), "service"); + list<ContainerStatus>::iterator retStatus = retResponse.getCompletedContainersStatuses().begin(); + EXPECT_EQ(retStatus->getContainerId().getId(), 501); + EXPECT_EQ(retStatus->getContainerState(), ContainerState::C_RUNNING); + //EXPECT_EQ(retStatus->getDiagnostics(), "diagnostics"); + EXPECT_EQ(retStatus->getExitStatus(), -1000); + EXPECT_EQ(retResponse.getResourceLimit().getMemory(), 1024*8*10); + //list<NodeReport>::iterator report = response.getUpdatedNodes().begin(); + //EXPECT_EQ(report->getNodeId().getHost(), "node1"); + //list<NMToken>::iterator nmToken = response.getNMTokens().begin(); + //EXPECT_EQ(nmToken->getNodeId().getHost(), "node1"); + //EXPECT_EQ(nmToken->getToken().getIdentifier(), "identifier"); + EXPECT_EQ(retResponse.getNumClusterNodes(), 12); +} + +TEST_F(TestApplicationMaster,TestFinishApplicationMaster){ + FinishApplicationMasterResponse finishApplicationMasterResponse; + finishApplicationMasterResponse.setIsUnregistered(true); + EXPECT_CALL((*protocol),finishApplicationMaster(_)).Times(AnyNumber()).WillOnce(Return(finishApplicationMasterResponse)); + string diagnostics(""); + string trackingUrl(""); + FinalApplicationStatus finalstatus; + bool response = client->finishApplicationMaster(diagnostics,trackingUrl,finalstatus); + EXPECT_EQ(response,true); +} + http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/383818c2/depends/libyarn/test/unit/TestLibYarnClient/TestContainerManagement.cpp ---------------------------------------------------------------------- diff --git a/depends/libyarn/test/unit/TestLibYarnClient/TestContainerManagement.cpp b/depends/libyarn/test/unit/TestLibYarnClient/TestContainerManagement.cpp new file mode 100644 index 0000000..e927d68 --- /dev/null +++ b/depends/libyarn/test/unit/TestLibYarnClient/TestContainerManagement.cpp @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +#include <list> +#include <map> +#include <string> + +#include "gtest/gtest.h" +#include "gmock/gmock.h" + +#include "libyarnclient/ContainerManagement.h" +#include "MockContainerManagementProtocol.h" +#include "TestContainerManagementStub.h" + +using std::map; +using std::string; +using std::list; +using namespace libyarn; +using namespace testing; +using namespace Mock; + +class MockContainerManagementStub: public TestContainerManagementStub { +public: + MOCK_METHOD0(getContainerManagementProtocol, ContainerManagementProtocol * ()); +}; + +TEST(TestContainerManagement,TestStartContainer){ + ContainerManagement client; + MockContainerManagementStub stub; + string nmHost("localhost"); + string nmPort("8032"); + string tokenService = ""; + Yarn::Config config; + Yarn::Internal::SessionConfig sessionConfig(config); + Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser(); + Yarn::Internal::RpcAuth rpcAuth(user, Yarn::Internal::AuthMethod::SIMPLE); + MockContainerManagementProtocol *protocol =new MockContainerManagementProtocol(nmHost,nmPort,tokenService,sessionConfig,rpcAuth); + + StringBytesMap map; + string key("key"); + string value("value"); + map.setKey(key); + map.setValue(value); + list<StringBytesMap> maps; + maps.push_back(map); + ContainerId containerId; + containerId.setId(501); + list<ContainerId> containerIds; + containerIds.push_back(containerId); + ContainerExceptionMap exceptionMap; + exceptionMap.setContainerId(containerId); + SerializedException exception; + string message("message"); + string trace("trace"); + string className("className"); + exception.setMessage(message); + exception.setTrace(trace); + exception.setClassName(className); + SerializedException cause; + string message2("message2"); + cause.setMessage(message2); + exception.setCause(cause); + exceptionMap.setSerializedException(exception); + list<ContainerExceptionMap> exceptionMaps; + exceptionMaps.push_back(exceptionMap); + StartContainersResponse response; + response.setServicesMetaData(maps); + response.setSucceededRequests(containerIds); + response.setFailedRequests(exceptionMaps); + EXPECT_CALL(*protocol, startContainers(_)).Times(AnyNumber()).WillOnce(Return(response)); + client.stub = &stub; + EXPECT_CALL(stub, getContainerManagementProtocol()).Times(AnyNumber()).WillOnce(Return(protocol)); + + Container container; + StartContainerRequest request; + libyarn::Token nmToken; + StartContainerResponse ret = client.startContainer(container,request,nmToken); + list<StringBytesMap>::iterator itMap = ret.getServicesMetaData().begin(); + //EXPECT_EQ(itMap->getKey(), "key"); + //EXPECT_EQ(itMap->getValue(), "value"); +} + +TEST(TestContainerManagement,TestStopContainer){ + ContainerManagement client; + MockContainerManagementStub stub; + string nmHost("localhost"); + string nmPort("8032"); + string tokenService = ""; + Yarn::Config config; + Yarn::Internal::SessionConfig sessionConfig(config); + Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser(); + Yarn::Internal::RpcAuth rpcAuth(user, Yarn::Internal::AuthMethod::SIMPLE); + MockContainerManagementProtocol *protocol =new MockContainerManagementProtocol(nmHost,nmPort,tokenService,sessionConfig,rpcAuth); + + StopContainersResponseProto stopResponseProto; + EXPECT_CALL(*protocol, stopContainers(_)).Times(AnyNumber()).WillOnce(Return(StopContainersResponse(stopResponseProto))); + client.stub = &stub; + EXPECT_CALL(stub, getContainerManagementProtocol()).Times(AnyNumber()).WillOnce(Return(protocol)); + + Container container; + libyarn::Token nmToken; + client.stopContainer(container,nmToken); +} + +TEST(TestContainerManagement,TestGetContainerStatus){ + ContainerManagement client; + MockContainerManagementStub stub; + string nmHost("localhost"); + string nmPort("8032"); + string tokenService = ""; + Yarn::Config config; + Yarn::Internal::SessionConfig sessionConfig(config); + Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser(); + Yarn::Internal::RpcAuth rpcAuth(user, Yarn::Internal::AuthMethod::SIMPLE); + MockContainerManagementProtocol *protocol =new MockContainerManagementProtocol(nmHost,nmPort,tokenService,sessionConfig,rpcAuth); + + GetContainerStatusesResponse getResponse; + ContainerId containerId; + containerId.setId(501); + ContainerStatus status; + status.setContainerId(containerId); + list<ContainerStatus> statuses; + statuses.push_back(status); + getResponse.setContainerStatuses(statuses); + EXPECT_CALL(*protocol, getContainerStatuses(_)).Times(1).WillOnce(Return(getResponse)); + client.stub = &stub; + EXPECT_CALL(stub, getContainerManagementProtocol()).Times(1).WillRepeatedly(Return(protocol)); + + Container container; + libyarn::Token nmToken; + ContainerStatus retStatus = client.getContainerStatus(container,nmToken); + EXPECT_EQ(retStatus.getContainerId().getId(), 501); + + GetContainerStatusesResponse getEmptyResponse; + protocol =new MockContainerManagementProtocol(nmHost,nmPort,tokenService,sessionConfig,rpcAuth); + EXPECT_CALL(*protocol, getContainerStatuses(_)).Times(1).WillOnce(Return(getEmptyResponse)); + EXPECT_CALL(stub, getContainerManagementProtocol()).Times(1).WillRepeatedly(Return(protocol)); + + retStatus = client.getContainerStatus(container, nmToken); + EXPECT_EQ(retStatus.getContainerId().getId(), 0); +} +
