Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions SpaceBattle.App/App.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Hwdtech;
using SpaceBattle.Lib;

public class App
{
public static void Main(int[] args)
{
var NumberOfTreads = args[0];
new InitCommand().Execute();
Console.WriteLine("Запуск сервера\nСоздание и регистрация потоков...");
IoC.Resolve<Hwdtech.ICommand>("Game.Commands.StartServerCommand", NumberOfTreads).Execute();
Console.WriteLine("Потоки запущены\nДля завершения работы сервера нажмите любую клавишу");
Console.ReadKey();
Console.WriteLine("Завершение работы сервера. Закрытие потоков...");
IoC.Resolve<Hwdtech.ICommand>("Game.Commands.StopServerCommand");
Console.WriteLine("Все потоки закрыты. Завершение работы программы");
}
}
169 changes: 0 additions & 169 deletions SpaceBattle.Lib.Tests/EndPointTests.cs

This file was deleted.

100 changes: 100 additions & 0 deletions SpaceBattle.Lib.Tests/MessageTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
using Hwdtech;
using Hwdtech.Ioc;
using Moq;

namespace SpaceBattle.Lib.Test;

public class MessageTests
{
public MessageTests()
{
new InitScopeBasedIoCImplementationCommand().Execute();

IoC.Resolve<Hwdtech.ICommand>("Scopes.Current.Set", IoC.Resolve<object>("Scopes.New", IoC.Resolve<object>("Scopes.Root"))).Execute();
}
[Fact]
public void QueuePushCommandPush()
{
var mockCommand = new Mock<Hwdtech.ICommand>();
var mockMessage = new Mock<IMessage>();
mockCommand.Setup(a => a.Execute()).Verifiable();
mockMessage.SetupGet(m => m.GameID).Returns("GameABC").Verifiable();

IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Queue.Push", (object[] args) => args[1]).Execute();
IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.CreateCommand", (object[] args) => mockCommand.Object).Execute();

var command = new InterpreterCommand(mockMessage.Object);
command.Execute();

mockCommand.Verify(x => x.Execute(), Times.Once);
}
[Fact]
public void Queue_CantReadId()
{
var mockCommand = new Mock<Hwdtech.ICommand>();
var mockMessage = new Mock<IMessage>();
mockCommand.Setup(a => a.Execute()).Verifiable();
mockMessage.SetupGet(m => m.GameID).Throws(new Exception()).Verifiable();

IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Queue.Push", (object[] args) => args[1]).Execute();
IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.CreateCommand", (object[] args) => mockCommand.Object).Execute();

var command = new InterpreterCommand(mockMessage.Object);

Assert.Throws<Exception>(command.Execute);
}
[Fact]
public void GameCreateCommand()
{
var mockCommand = new Mock<Hwdtech.ICommand>();
var mockMessage = new Mock<IMessage>();
mockMessage.SetupGet(m => m.GameID).Returns("GameABC").Verifiable();
mockCommand.Setup(x => x.Execute()).Throws(new Exception());
IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.CreateCommand", (object[] args) =>
{
mockCommand.Object.Execute();
return new ActionCommand(() => { });
}).Execute();

var command = new InterpreterCommand(mockMessage.Object);

Assert.Throws<Exception>(command.Execute);
}
[Fact]
public void QueuePushError()
{
var mockCommand = new Mock<Hwdtech.ICommand>();
var mockMessage = new Mock<IMessage>();
mockMessage.SetupGet(m => m.GameID).Returns("GameXYZ").Verifiable();
mockCommand.Setup(x => x.Execute()).Throws(new Exception());
IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.CreateCommand", (object[] args) => new ActionCommand(() => { })).Execute();

IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Queue.Push", (object[] args) =>
{
mockCommand.Object.Execute();
return new ActionCommand(() => { });
}).Execute();

var interpreterCommand = new InterpreterCommand(mockMessage.Object);

Assert.Throws<Exception>(interpreterCommand.Execute);
}
[Fact]
public void QueuePushCreatesBrokenCommand()
{
var mockCommand = new Mock<Hwdtech.ICommand>();
var mockMessage = new Mock<IMessage>();
mockMessage.SetupGet(m => m.GameID).Returns("GameXYZ").Verifiable();
mockCommand.Setup(x => x.Execute()).Throws(new Exception());
IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.CreateCommand", (object[] args) => new ActionCommand(() => { })).Execute();

IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Queue.Push", (object[] args) =>
{
return mockCommand.Object;
}).Execute();

var interpreterCommand = new InterpreterCommand(mockMessage.Object);

Assert.Throws<Exception>(interpreterCommand.Execute);
}
}
1 change: 0 additions & 1 deletion SpaceBattle.Lib.Tests/SpaceBattle.Lib.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@

<ItemGroup>
<ProjectReference Include="..\SpaceBattle.Lib\SpaceBattle.Lib.csproj" />
<ProjectReference Include="..\WebHttp\WebHttp.csproj" />
</ItemGroup>

</Project>
28 changes: 28 additions & 0 deletions SpaceBattle.Lib.Tests/StartServerTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using Hwdtech;
using Hwdtech.Ioc;
using Moq;

namespace SpaceBattle.Lib.Test;

public class StartServerTest
{
public StartServerTest()
{
new InitScopeBasedIoCImplementationCommand().Execute();
IoC.Resolve<Hwdtech.ICommand>("Scopes.Current.Set", IoC.Resolve<object>("Scopes.New", IoC.Resolve<object>("Scopes.Root"))).Execute();
var a = new InitCommand();
a.Execute();
}
[Fact]
public void Start_Server_Test()
{
var startCommand = new Mock<ICommand>();
startCommand.Setup(cmd => cmd.Execute()).Verifiable();
IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Commands.CreateAndStartThread", (object[] args) =>
{
return startCommand.Object;
}).Execute();
IoC.Resolve<ICommand>("Game.Commands.StartServerCommand", 5).Execute();
startCommand.Verify(cmd => cmd.Execute(), Times.Exactly(5));
}
}
70 changes: 70 additions & 0 deletions SpaceBattle.Lib.Tests/StopServerTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
using Hwdtech;
using Hwdtech.Ioc;
using Moq;

namespace SpaceBattle.Lib.Test;

public class StopServerTest
{
public StopServerTest()
{
new InitScopeBasedIoCImplementationCommand().Execute();
IoC.Resolve<Hwdtech.ICommand>("Scopes.Current.Set", IoC.Resolve<object>("Scopes.New", IoC.Resolve<object>("Scopes.Root"))).Execute();

var logfilepath = Path.GetTempFileName();
IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "GetLogFilePath", (object[] args) =>
{
return logfilepath;
}).Execute();
var a = new InitCommand();
a.Execute();
}

[Fact]

public void StopServer_Test()
{
var threadList = new List<int> { 1, 2, 3 };
var barrier = new Barrier(4);
var stopCommand = new Mock<ICommand>();
stopCommand.Setup(x => x.Execute()).Verifiable();
IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Commands.GetThreadIDs", (object[] args) => { return threadList; }).Execute();

IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Commands.StopServerBarrierRemove", (object[] args) =>
{
return () => { barrier.RemoveParticipant(); };
}).Execute();

IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Commands.StopServerBarrierWait", (object[] args) =>
{
return new ActionCommand(() => { barrier.SignalAndWait(); });
}).Execute();

IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Commands.SoftStopThread", (object[] args) =>
{
return new ActionCommand((Action)args[1]);
}).Execute();
IoC.Resolve<Hwdtech.ICommand>("IoC.Register", "Game.Commands.SendCommand", (object[] args) =>
{
return new ActionCommand(() =>
{
((ICommand)args[1]).Execute();
stopCommand.Object.Execute();
});
}).Execute();

IoC.Resolve<ICommand>("Game.Commands.StopServerCommand").Execute();

Assert.Equal(1, barrier.CurrentPhaseNumber);
stopCommand.Verify(cmd => cmd.Execute(), Times.Exactly(3));
}

[Fact]
public void StopServer_TestwithExeption()
{
IoC.Resolve<ICommand>("Game.Commands.ExeptionHandler", new ActionCommand(() => { }), new Exception()).Execute();

var testString = "Error occurred in command: SpaceBattle.Lib.ActionCommand\nException: System.Exception: Exception of type 'System.Exception' was thrown.\n";
Assert.Equal(File.ReadAllText(IoC.Resolve<string>("GetLogFilePath")), testString);
}
}
Loading
Loading