Skip to content

Commit

Permalink
Add tests for LocalLobby
Browse files Browse the repository at this point in the history
  • Loading branch information
james7132 committed Nov 17, 2019
1 parent 1c86920 commit 3652f93
Show file tree
Hide file tree
Showing 8 changed files with 233 additions and 6 deletions.
8 changes: 6 additions & 2 deletions Runtime/Integrations/Local/LocalLobby.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public static LocalLobbyView Create(ulong id, int capacity, ulong ownerId = 0,
LocalLobby(ulong id, int capacity, ulong ownerId,
double packetLossPercent, Random packetLossRng) {
Id = id;
OwnerId = ownerId;
Capacity = capacity;
_packetLossRng = packetLossRng;
_connectedViews = new Dictionary<AccountHandle, LocalLobbyView>();
Expand Down Expand Up @@ -72,7 +73,10 @@ public LocalLobbyView CreateView(AccountHandle id) {
public void Delete() => Dispose();

internal void Connect(LocalLobbyView view) {
var handle = new AccountHandle(view.Id);
if (_connectedViews.Count >= Capacity) {
throw new InvalidOperationException("Cannot join a lobby that is already full");
}
var handle = new AccountHandle(view.UserId);
if (_connectedViews.ContainsKey(handle)) return;
_metadata.AddMember(handle);
_connectedViews[handle] = view;
Expand All @@ -82,7 +86,7 @@ internal void Connect(LocalLobbyView view) {
}

internal void Disconnect(LocalLobbyView view) {
var handle = new AccountHandle(view.Id);
var handle = new AccountHandle(view.UserId);
if (!_connectedViews.ContainsKey(handle)) return;
_metadata.RemoveMember(handle);
_connectedViews.Remove(handle);
Expand Down
8 changes: 4 additions & 4 deletions Runtime/Integrations/Local/LocalLobbyView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public sealed class LocalLobbyView : Lobby {
/// </summary>
public LocalLobby BaseLobby { get; }

public override ulong Id { get; }
public override ulong Id => BaseLobby.Id;
public override ulong UserId { get; }
public override ulong OwnerId => BaseLobby.OwnerId;
public override LobbyType Type => BaseLobby.Type;
Expand All @@ -46,11 +46,11 @@ internal LocalLobbyView(ulong userId, LocalLobby lobby) : base() {
public override IReadOnlyDictionary<string, string> GetAllMetadata() => BaseLobby.GetAllMetadata();

internal override string GetMemberMetadata(AccountHandle handle, string key) =>
throw new NotSupportedException();
BaseLobby.GetMemberMetadata(handle, key);
internal override void SetMemberMetadata(AccountHandle handle, string key, string value) =>
throw new NotSupportedException();
BaseLobby.SetMemberMetadata(handle, key, value);
internal override void DeleteMemberMetadata(AccountHandle handle, string key) =>
throw new NotSupportedException();
BaseLobby.DeleteMemberMetadata(handle, key);

public override void SendLobbyMessage(FixedBuffer message) {
BaseLobby.SendLobbyMessage(new AccountHandle(UserId), message);
Expand Down
8 changes: 8 additions & 0 deletions Tests.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Tests/Runtime.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

172 changes: 172 additions & 0 deletions Tests/Runtime/LocalLobbyTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
using System.Collections;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;

namespace HouraiTeahouse.Networking {

public class LocalLobbyTests {

[Test]
public void LocalLobby_Create() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
Assert.AreEqual(id, lobbyView.Id, "Lobby ID must be the same");
Assert.AreEqual(ownerId, lobbyView.OwnerId, "Lobby view ID must be the same");
Assert.AreEqual(ownerId, lobbyView.UserId, "Lobby view user ID must be the same");
Assert.AreEqual(1, lobbyView.MemberCount, "Lobby view user ID must be the same");
Assert.AreEqual(capacity, lobbyView.Capacity, "Lobby view capacity must be the same");
}

[Test]
public void LocalLobby_CreateViewDoesNotTriggerEvents() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
lobbyView.OnMemberJoin += (member) => Assert.Fail("OnMemberJoin should not be called");
lobbyView.OnMemberLeave += (member) => Assert.Fail("OnMemberLeave should not be called");
lobbyView.BaseLobby.CreateView(450);
}

[Test]
public void LocalLobby_JoinTriggersOnMemberJoin() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
var triggered = false;
lobbyView.OnMemberJoin += (member) => triggered = true;
lobbyView.OnMemberLeave += (member) => Assert.Fail("OnMemberLeave should not be called");
var remote = lobbyView.BaseLobby.CreateView(450);
remote.Join().Wait();
Assert.IsTrue(triggered);
}

[Test]
public void LocalLobby_LeaveTriggersOnMemberLeave() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
var triggered = false;
lobbyView.OnMemberLeave += (member) => triggered = true;
var remote = lobbyView.BaseLobby.CreateView(450);
remote.Join().Wait();
remote.Leave();
Assert.IsTrue(triggered);
}

[Test]
public void LocalLobby_SetMetadataUpdatesEveryone() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
const string key = "key";
const string value = "value";
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
var triggered = false;
lobbyView.OnUpdated += () => triggered = true;
var remote = lobbyView.BaseLobby.CreateView(450);
remote.Join().Wait();
lobbyView.SetMetadata(key, value);
Assert.AreEqual(value, remote.GetMetadata(key));
Assert.IsTrue(triggered);
}

[Test]
public void LocalLobby_SetMetadataDoesntUpdate() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
const string key = "key";
const string value = "value";
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
var triggered = false;
var remote = lobbyView.BaseLobby.CreateView(450);
remote.Join().Wait();
lobbyView.SetMetadata(key, value);
lobbyView.OnUpdated += () => triggered = true;
lobbyView.SetMetadata(key, value);
Assert.AreEqual(value, remote.GetMetadata(key));
Assert.IsFalse(triggered);
}

[Test]
public void LocalLobby_DeleteMetadataUpdatesEveryone() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
const string key = "key";
const string value = "value";
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
var triggered = false;
lobbyView.OnUpdated += () => triggered = true;
var remote = lobbyView.BaseLobby.CreateView(450);
remote.Join().Wait();
lobbyView.SetMetadata(key, value);
lobbyView.DeleteMetadata(key);
Assert.AreEqual(string.Empty, remote.GetMetadata(key));
Assert.IsTrue(triggered);
}

[Test]
public void LocalLobby_DeleteMetadataDoesntUpdate() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
const string key = "key";
const string value = "value";
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
var triggered = false;
lobbyView.OnUpdated += () => triggered = true;
var remote = lobbyView.BaseLobby.CreateView(450);
remote.Join().Wait();
lobbyView.DeleteMetadata(key);
Assert.AreEqual(string.Empty, remote.GetMetadata(key));
Assert.IsFalse(triggered);
}

[Test]
public void LocalLobby_SetMemberMetadataUpdatesEveryone() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
const string key = "key";
const string value = "value";
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
ulong updatedId = 0;
lobbyView.OnMemberUpdated+= (mem) => updatedId = mem.Id;
var remote = lobbyView.BaseLobby.CreateView(450);
remote.Join().Wait();
var member = lobbyView.Members.Get(remote.UserId);
member.SetMetadata(key, value);
Assert.AreEqual(value, remote.Members.Get(remote.UserId).GetMetadata(key));
Assert.AreEqual(updatedId, remote.UserId);
}

[Test]
public void LocalLobby_DeleteMemberMetadataUpdatesEveryone() {
const ulong id = 69;
const ulong ownerId = 400;
const int capacity = 4;
const string key = "key";
const string value = "value";
var lobbyView = LocalLobby.Create(id, capacity, ownerId);
ulong updatedId = 0;
lobbyView.OnMemberUpdated+= (mem) => updatedId = mem.Id;
var remote = lobbyView.BaseLobby.CreateView(450);
remote.Join().Wait();
var member = lobbyView.Members.Get(remote.UserId);
member.SetMetadata(key, value);
member.DeleteMetadata(key);
Assert.AreEqual(string.Empty, remote.Members.Get(remote.UserId).GetMetadata(key));
Assert.AreEqual(updatedId, remote.UserId);
}

}

}
11 changes: 11 additions & 0 deletions Tests/Runtime/LocalLobbyTests.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions Tests/Runtime/com.houraiteahouse.networking.Editor.Tests.asmdef
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "com.houraiteahouse.networking.EditorTests",
"references": [
"GUID:4487c07f4904b9441a8796ba81d3a533"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 3652f93

Please sign in to comment.