Skip to content

Commit

Permalink
テストを一新
Browse files Browse the repository at this point in the history
  • Loading branch information
castaneai committed Jul 20, 2015
1 parent 1872acb commit 6807ce3
Show file tree
Hide file tree
Showing 14 changed files with 246 additions and 153 deletions.
114 changes: 0 additions & 114 deletions AgiriTest/AgiriTest.cs

This file was deleted.

33 changes: 0 additions & 33 deletions TestClient/main.cpp

This file was deleted.

22 changes: 20 additions & 2 deletions agiri.sln
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@ VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "agiri", "agiri\agiri.vcxproj", "{BC877335-7A01-4B43-B3A9-99FE244BCA2D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgiriTest", "AgiriTest\AgiriTest.csproj", "{F60BA12F-8A36-4CBF-9E65-8BA9E398F4BF}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgiriBoss", "AgiriBoss\AgiriBoss.csproj", "{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestClient", "TestClient\TestClient.vcxproj", "{BACF50F1-AB0A-47E7-BBED-E845EBE00322}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{73B805CD-D5E5-4D18-9E7F-C17B66AB01A4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgiriTest", "test\AgiriTest\AgiriTest.csproj", "{F60BA12F-8A36-4CBF-9E65-8BA9E398F4BF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_client", "test\test_client\test_client.vcxproj", "{BACF50F1-AB0A-47E7-BBED-E845EBE00322}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand All @@ -29,6 +33,16 @@ Global
{BC877335-7A01-4B43-B3A9-99FE244BCA2D}.Release|Mixed Platforms.Build.0 = Release|Win32
{BC877335-7A01-4B43-B3A9-99FE244BCA2D}.Release|Win32.ActiveCfg = Release|Win32
{BC877335-7A01-4B43-B3A9-99FE244BCA2D}.Release|Win32.Build.0 = Release|Win32
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Debug|Win32.ActiveCfg = Debug|Any CPU
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Release|Any CPU.Build.0 = Release|Any CPU
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{39E053B5-71B1-4328-ACE7-43BF0C2CF85C}.Release|Win32.ActiveCfg = Release|Any CPU
{F60BA12F-8A36-4CBF-9E65-8BA9E398F4BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F60BA12F-8A36-4CBF-9E65-8BA9E398F4BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F60BA12F-8A36-4CBF-9E65-8BA9E398F4BF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
Expand All @@ -53,4 +67,8 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{F60BA12F-8A36-4CBF-9E65-8BA9E398F4BF} = {73B805CD-D5E5-4D18-9E7F-C17B66AB01A4}
{BACF50F1-AB0A-47E7-BBED-E845EBE00322} = {73B805CD-D5E5-4D18-9E7F-C17B66AB01A4}
EndGlobalSection
EndGlobal
1 change: 1 addition & 0 deletions agiri/agiri.vcxproj.user
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<LocalDebuggerWorkingDirectory>$(SolutionDir)\$(Configuration)</LocalDebuggerWorkingDirectory>
<LocalDebuggerAttach>false</LocalDebuggerAttach>
<LocalDebuggerCommandArguments>10000</LocalDebuggerCommandArguments>
</PropertyGroup>
</Project>
159 changes: 159 additions & 0 deletions test/AgiriTest/AgiriTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
using System;
using System.Linq;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace AgiriTest
{
[TestClass]
public class AgiriTest
{
public TestContext TestContext { get; set; }

/// <summary>
/// テスト用サーバーのデフォルトの待ち受けポート番号
/// </summary>
private const ushort defaultTestServerListenPort = 10000;

/// <summary>
/// agiriのポート番号
/// </summary>
private const ushort agiriPort = 10800;

/// <summary>
/// テスト用サーバー
/// </summary>
private TcpListener testServer;

/// <summary>
/// テスト用クライアント
/// </summary>
private Process testClientProcess;

/// <summary>
/// テスト用サーバーを起動する
/// </summary>
/// <param name="listenPort"></param>
/// <returns></returns>
private static TcpListener startTestServer(ushort listenPort = defaultTestServerListenPort)
{
var testServer = new TcpListener(IPAddress.Loopback, listenPort);
testServer.Start();
return testServer;
}

/// <summary>
/// テスト用クライアントを起動する
/// </summary>
/// <returns></returns>
private Process startTestClientProcess()
{
var solutionDir = Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + "/../../../..");
var clientPath = solutionDir + "/Debug/test_client.exe";
return Process.Start(clientPath, defaultTestServerListenPort.ToString());
}

[TestInitialize]
public void BeforeEach()
{
testServer = startTestServer();
testClientProcess = startTestClientProcess();
}

[TestCleanup]
public void AfterEach()
{
testClientProcess.CloseMainWindow();
testServer.Stop();
}

private void agiriContext(Action<StreamReader, StreamWriter, NinjaConnection> action)
{
using (var testClientConnection = testServer.AcceptTcpClient())
using (var testClientReader = new StreamReader(testClientConnection.GetStream()))
using (var testClientWriter = new StreamWriter(testClientConnection.GetStream()))
using (var ninjaConnection = new NinjaConnection(agiriPort)) {
action(testClientReader, testClientWriter, ninjaConnection);
}
}

/// <summary>
/// テスト用クライアントにagiri.dllを注入できたか
/// </summary>
[TestMethod]
public void TestEstablishNinjaConnection()
{
using (var ninjaConnection = new NinjaConnection(agiriPort)) {
}
}

/// <summary>
/// agiri.dllと複数のNinjaConnectionを確立できるか
/// </summary>
[TestMethod]
public void TestEstablishMultipleNinjaConnection()
{
using (var firstNinja = new NinjaConnection(agiriPort))
using (var secondNinja = new NinjaConnection(agiriPort)) {
}
}

/// <summary>
/// agiri.dllと通信できるか (pingリクエストを送るとpongレスポンスが返ってくるか)
/// </summary>
[TestMethod]
public void TestNinjaConnection()
{
using (var ninjaConnection = new NinjaConnection(agiriPort)) {
Assert.IsTrue(ninjaConnection.Ping());
}
}

/// <summary>
/// ソケット一覧を取得できるか
/// </summary>
[TestMethod]
public void TestListSocket()
{
agiriContext((reader, writer, ninja) => {
var sockets = ninja.GetAllSockets();
Assert.IsTrue(sockets.Any(s => s.EndPoint.Port == defaultTestServerListenPort), "ソケット一覧にはテストサーバーへの接続ソケットが含まれているはず");
});
}

/// <summary>
/// snifferからsendパケットを差し込むことができるか
/// </summary>
[TestMethod]
public void TestInjectOutgoingPacket()
{
agiriContext((reader, writer, ninja) => {
var targetSocket = ninja.GetAllSockets().First(si => si.EndPoint.Port == defaultTestServerListenPort);
ninja.InjectOutgoingPacket(targetSocket.SocketID, Encoding.ASCII.GetBytes("abcdefg\n"));
Assert.AreEqual("abcdefg", reader.ReadLine(), "agiriから差し込まれたメッセージがテスト用サーバーに届くはず");
});
}

/// <summary>
/// recvパケットをsnifferに横流しできるか
/// </summary>
[TestMethod]
public void TestSniffIncomingPacket()
{
agiriContext((reader, writer, ninja) => {
var targetSocket = ninja.GetAllSockets().First(s => s.EndPoint.Port == defaultTestServerListenPort);
ninja.StartSniffIncomingPacket(targetSocket.SocketID);
writer.Write("SNIFFED");
writer.Flush();
var received = ninja.ReceiveSniffedIncomingPacket(targetSocket.SocketID);
Assert.AreEqual("SNIFFED", Encoding.ASCII.GetString(received), "テスト用サーバーがテスト用クライアントに返した内容をagiriが横取りできたはず");
});
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
<ItemGroup>
<Compile Include="AgiriTest.cs" />
<Compile Include="Message.cs" />
<Compile Include="Sniffer.cs" />
<Compile Include="NinjaConnection.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Choose>
Expand Down
6 changes: 6 additions & 0 deletions test/AgiriTest/AgiriTest.csproj.user
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
</PropertyGroup>
</Project>
File renamed without changes.
Loading

0 comments on commit 6807ce3

Please sign in to comment.