blob: b2824200a63dbe25ffcd9b17272706dbc787711e [file] [log] [blame]
/*
* Copyright 2014, The Android Open Source Project
*
* 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.
*/
#include "Connection.h"
#include "GazerConnection.h"
#include "GazerListener.h"
#include "MockConnection.h"
#include "TestUtilities.h"
#include <memory>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
using ::testing::_;
using ::testing::DoAll;
using ::testing::IsNull;
using ::testing::NotNull;
using ::testing::Return;
using ::testing::ReturnArg;
using ::testing::StrictMock;
using ::testing::WithArg;
namespace android {
namespace caze {
namespace test {
namespace {
const size_t BUFFER_SIZE = 4096;
class GazerListenerTest : public ::testing::Test {
protected:
virtual void SetUp() {
mConnection = new StrictMock<MockConnection>();
mGazerListener.reset(new GazerListener(std::unique_ptr<Connection>(mConnection)));
}
StrictMock<MockConnection>* mConnection;
std::unique_ptr<GazerListener> mGazerListener;
};
void registerMocksForCreateGazerConnection(MockConnection* connection) {
// Connection type
EXPECT_CALL(*connection, recv(_, 1))
.WillOnce(DoAll(WithArg<0>(SetVoidPointee(toByteVector<uint8_t>(1))), ReturnArg<1>()));
EXPECT_CALL(*connection, recv(_, 4))
// Replay id length
.WillOnce(DoAll(WithArg<0>(SetVoidPointee(toByteVector<uint32_t>(0))), ReturnArg<1>()))
// Replay length
.WillOnce(DoAll(WithArg<0>(SetVoidPointee(toByteVector<uint32_t>(0))), ReturnArg<1>()));
// Replay id
EXPECT_CALL(*connection, recv(_, 0)).WillOnce(ReturnArg<1>());
}
} // end of anonymous namespace
TEST_F(GazerListenerTest, AcceptConnection) {
auto clientConnection = new StrictMock<MockConnection>();
EXPECT_CALL(*mConnection, acceptProxy()).WillOnce(Return(clientConnection));
registerMocksForCreateGazerConnection(clientConnection);
EXPECT_THAT(mGazerListener->acceptConnection(), NotNull());
}
TEST_F(GazerListenerTest, AcceptConnectionErrorAccept) {
EXPECT_CALL(*mConnection, acceptProxy()).WillOnce(Return(nullptr));
EXPECT_THAT(mGazerListener->acceptConnection(), IsNull());
}
TEST_F(GazerListenerTest, AcceptConnectionErrorGazerConnection) {
auto clientConnection1 = new StrictMock<MockConnection>();
auto clientConnection2 = new StrictMock<MockConnection>();
EXPECT_CALL(*mConnection, acceptProxy())
.WillOnce(Return(clientConnection1))
.WillOnce(Return(clientConnection2));
// Connection type
EXPECT_CALL(*clientConnection1, recv(_, 1))
.WillOnce(DoAll(WithArg<0>(SetVoidPointee(toByteVector<uint8_t>(1))), ReturnArg<1>()));
// Replay id length failed
EXPECT_CALL(*clientConnection1, recv(_, 4)).WillOnce(Return(2));
registerMocksForCreateGazerConnection(clientConnection2);
EXPECT_THAT(mGazerListener->acceptConnection(), NotNull());
}
} // end of namespace test
} // end of namespace caze
} // end of namespace android