@@ -557,7 +557,7 @@ protected override bool CanStartServerAndClients()
557
557
/// This is an adjustment to how the server and clients are started in order
558
558
/// to avoid timing issues when running in a stand alone test runner build.
559
559
/// </summary>
560
- private void InitializeServerAndClients ( bool useHost )
560
+ private void InitializeServerAndClients ( HostOrServer useHost )
561
561
{
562
562
s_ClientNetworkVariableTestInstances . Clear ( ) ;
563
563
m_PlayerPrefab . AddComponent < NetworkVariableTest > ( ) ;
@@ -574,7 +574,7 @@ private void InitializeServerAndClients(bool useHost)
574
574
client . NetworkConfig . PlayerPrefab = m_PlayerPrefab ;
575
575
}
576
576
577
- Assert . True ( NetcodeIntegrationTestHelpers . Start ( useHost , m_ServerNetworkManager , m_ClientNetworkManagers ) , "Failed to start server and client instances" ) ;
577
+ Assert . True ( NetcodeIntegrationTestHelpers . Start ( useHost == HostOrServer . Host , m_ServerNetworkManager , m_ClientNetworkManagers ) , "Failed to start server and client instances" ) ;
578
578
579
579
RegisterSceneManagerHandler ( ) ;
580
580
@@ -611,7 +611,7 @@ private void InitializeServerAndClients(bool useHost)
611
611
throw new Exception ( "at least one client network container not empty at start" ) ;
612
612
}
613
613
614
- var instanceCount = useHost ? NumberOfClients * 3 : NumberOfClients * 2 ;
614
+ var instanceCount = useHost == HostOrServer . Host ? NumberOfClients * 3 : NumberOfClients * 2 ;
615
615
// Wait for the client-side to notify it is finished initializing and spawning.
616
616
success = WaitForConditionOrTimeOutWithTimeTravel ( ( ) => s_ClientNetworkVariableTestInstances . Count == instanceCount ) ;
617
617
@@ -624,15 +624,15 @@ private void InitializeServerAndClients(bool useHost)
624
624
/// Runs generalized tests on all predefined NetworkVariable types
625
625
/// </summary>
626
626
[ Test ]
627
- public void AllNetworkVariableTypes ( [ Values ( true , false ) ] bool useHost )
627
+ public void AllNetworkVariableTypes ( [ Values ] HostOrServer useHost )
628
628
{
629
629
// Create, instantiate, and host
630
630
// This would normally go in Setup, but since every other test but this one
631
631
// uses NetworkManagerHelper, and it does its own NetworkManager setup / teardown,
632
632
// for now we put this within this one test until we migrate it to MIH
633
- Assert . IsTrue ( NetworkManagerHelper . StartNetworkManager ( out NetworkManager server , useHost ? NetworkManagerHelper . NetworkManagerOperatingMode . Host : NetworkManagerHelper . NetworkManagerOperatingMode . Server ) ) ;
633
+ Assert . IsTrue ( NetworkManagerHelper . StartNetworkManager ( out NetworkManager server , useHost == HostOrServer . Host ? NetworkManagerHelper . NetworkManagerOperatingMode . Host : NetworkManagerHelper . NetworkManagerOperatingMode . Server ) ) ;
634
634
635
- Assert . IsTrue ( server . IsHost == useHost , $ "{ nameof ( useHost ) } does not match the server.IsHost value!") ;
635
+ Assert . IsTrue ( server . IsHost == ( useHost == HostOrServer . Host ) , $ "{ nameof ( useHost ) } does not match the server.IsHost value!") ;
636
636
637
637
Guid gameObjectId = NetworkManagerHelper . AddGameNetworkObject ( "NetworkVariableTestComponent" ) ;
638
638
@@ -662,7 +662,7 @@ public void AllNetworkVariableTypes([Values(true, false)] bool useHost)
662
662
}
663
663
664
664
[ Test ]
665
- public void ClientWritePermissionTest ( [ Values ( true , false ) ] bool useHost )
665
+ public void ClientWritePermissionTest ( [ Values ] HostOrServer useHost )
666
666
{
667
667
InitializeServerAndClients ( useHost ) ;
668
668
@@ -674,7 +674,7 @@ public void ClientWritePermissionTest([Values(true, false)] bool useHost)
674
674
/// Runs tests that network variables sync on client whatever the local value of <see cref="Time.timeScale"/>.
675
675
/// </summary>
676
676
[ Test ]
677
- public void NetworkVariableSync_WithDifferentTimeScale ( [ Values ( true , false ) ] bool useHost , [ Values ( 0.0f , 1.0f , 2.0f ) ] float timeScale )
677
+ public void NetworkVariableSync_WithDifferentTimeScale ( [ Values ] HostOrServer useHost , [ Values ( 0.0f , 1.0f , 2.0f ) ] float timeScale )
678
678
{
679
679
Time . timeScale = timeScale ;
680
680
@@ -688,7 +688,7 @@ public void NetworkVariableSync_WithDifferentTimeScale([Values(true, false)] boo
688
688
}
689
689
690
690
[ Test ]
691
- public void FixedString32Test ( [ Values ( true , false ) ] bool useHost )
691
+ public void FixedString32Test ( [ Values ] HostOrServer useHost )
692
692
{
693
693
InitializeServerAndClients ( useHost ) ;
694
694
m_Player1OnServer . FixedString32 . Value = k_FixedStringTestValue ;
@@ -699,23 +699,23 @@ public void FixedString32Test([Values(true, false)] bool useHost)
699
699
}
700
700
701
701
[ Test ]
702
- public void NetworkListAdd ( [ Values ( true , false ) ] bool useHost )
702
+ public void NetworkListAdd ( [ Values ] HostOrServer useHost )
703
703
{
704
704
InitializeServerAndClients ( useHost ) ;
705
705
m_NetworkListPredicateHandler = new NetworkListTestPredicate ( m_Player1OnServer , m_Player1OnClient1 , NetworkListTestPredicate . NetworkListTestStates . Add , 10 ) ;
706
706
Assert . True ( WaitForConditionOrTimeOutWithTimeTravel ( m_NetworkListPredicateHandler ) ) ;
707
707
}
708
708
709
709
[ Test ]
710
- public void WhenListContainsManyLargeValues_OverflowExceptionIsNotThrown ( [ Values ( true , false ) ] bool useHost )
710
+ public void WhenListContainsManyLargeValues_OverflowExceptionIsNotThrown ( [ Values ] HostOrServer useHost )
711
711
{
712
712
InitializeServerAndClients ( useHost ) ;
713
713
m_NetworkListPredicateHandler = new NetworkListTestPredicate ( m_Player1OnServer , m_Player1OnClient1 , NetworkListTestPredicate . NetworkListTestStates . ContainsLarge , 20 ) ;
714
714
Assert . True ( WaitForConditionOrTimeOutWithTimeTravel ( m_NetworkListPredicateHandler ) ) ;
715
715
}
716
716
717
717
[ Test ]
718
- public void NetworkListContains ( [ Values ( true , false ) ] bool useHost )
718
+ public void NetworkListContains ( [ Values ] HostOrServer useHost )
719
719
{
720
720
// Re-use the NetworkListAdd to initialize the server and client as well as make sure the list is populated
721
721
NetworkListAdd ( useHost ) ;
@@ -725,23 +725,9 @@ public void NetworkListContains([Values(true, false)] bool useHost)
725
725
Assert . True ( WaitForConditionOrTimeOutWithTimeTravel ( m_NetworkListPredicateHandler ) ) ;
726
726
}
727
727
728
- [ Test ]
729
- public void NetworkListRemove ( [ Values ( true , false ) ] bool useHost )
730
- {
731
- // Re-use the NetworkListAdd to initialize the server and client as well as make sure the list is populated
732
- NetworkListAdd ( useHost ) ;
733
-
734
- // Remove two entries by index
735
- m_Player1OnServer . TheList . Remove ( 3 ) ;
736
- m_Player1OnServer . TheList . Remove ( 5 ) ;
737
-
738
- // Really just verifies the data at this point
739
- m_NetworkListPredicateHandler . SetNetworkListTestState ( NetworkListTestPredicate . NetworkListTestStates . VerifyData ) ;
740
- Assert . True ( WaitForConditionOrTimeOutWithTimeTravel ( m_NetworkListPredicateHandler ) ) ;
741
- }
742
728
743
729
[ Test ]
744
- public void NetworkListInsert ( [ Values ( true , false ) ] bool useHost )
730
+ public void NetworkListInsert ( [ Values ] HostOrServer useHost )
745
731
{
746
732
// Re-use the NetworkListAdd to initialize the server and client as well as make sure the list is populated
747
733
NetworkListAdd ( useHost ) ;
@@ -755,7 +741,7 @@ public void NetworkListInsert([Values(true, false)] bool useHost)
755
741
}
756
742
757
743
[ Test ]
758
- public void NetworkListIndexOf ( [ Values ( true , false ) ] bool useHost )
744
+ public void NetworkListIndexOf ( [ Values ] HostOrServer useHost )
759
745
{
760
746
// Re-use the NetworkListAdd to initialize the server and client as well as make sure the list is populated
761
747
NetworkListAdd ( useHost ) ;
@@ -765,7 +751,7 @@ public void NetworkListIndexOf([Values(true, false)] bool useHost)
765
751
}
766
752
767
753
[ Test ]
768
- public void NetworkListValueUpdate ( [ Values ( true , false ) ] bool useHost )
754
+ public void NetworkListValueUpdate ( [ Values ] HostOrServer useHost )
769
755
{
770
756
var testSucceeded = false ;
771
757
InitializeServerAndClients ( useHost ) ;
@@ -796,24 +782,68 @@ void TestValueUpdatedCallback(NetworkListEvent<int> changedEvent)
796
782
m_Player1OnClient1 . TheList . OnListChanged -= TestValueUpdatedCallback ;
797
783
}
798
784
785
+ private List < int > m_ExpectedValuesServer = new List < int > ( ) ;
786
+ private List < int > m_ExpectedValuesClient = new List < int > ( ) ;
787
+
788
+ public enum ListRemoveTypes
789
+ {
790
+ Remove ,
791
+ RemoveAt
792
+ }
793
+
794
+
799
795
[ Test ]
800
- public void NetworkListRemoveAt ( [ Values ( true , false ) ] bool useHost )
796
+ public void NetworkListRemoveTests ( [ Values ] HostOrServer useHost , [ Values ] ListRemoveTypes listRemoveType )
801
797
{
798
+ m_ExpectedValuesServer . Clear ( ) ;
799
+ m_ExpectedValuesClient . Clear ( ) ;
802
800
// Re-use the NetworkListAdd to initialize the server and client as well as make sure the list is populated
803
801
NetworkListAdd ( useHost ) ;
804
802
805
803
// Randomly remove a few entries
806
- m_Player1OnServer . TheList . RemoveAt ( Random . Range ( 0 , m_Player1OnServer . TheList . Count - 1 ) ) ;
807
- m_Player1OnServer . TheList . RemoveAt ( Random . Range ( 0 , m_Player1OnServer . TheList . Count - 1 ) ) ;
808
- m_Player1OnServer . TheList . RemoveAt ( Random . Range ( 0 , m_Player1OnServer . TheList . Count - 1 ) ) ;
804
+ m_Player1OnServer . TheList . OnListChanged += Server_OnListChanged ;
805
+ m_Player1OnClient1 . TheList . OnListChanged += Client_OnListChanged ;
806
+
807
+ // Remove half of the elements
808
+ for ( int i = 0 ; i < ( int ) ( m_Player1OnServer . TheList . Count * 0.5f ) ; i ++ )
809
+ {
810
+ var index = Random . Range ( 0 , m_Player1OnServer . TheList . Count - 1 ) ;
811
+ var value = m_Player1OnServer . TheList [ index ] ;
812
+ m_ExpectedValuesServer . Add ( value ) ;
813
+ m_ExpectedValuesClient . Add ( value ) ;
814
+
815
+ if ( listRemoveType == ListRemoveTypes . RemoveAt )
816
+ {
817
+ m_Player1OnServer . TheList . RemoveAt ( index ) ;
818
+ }
819
+ else
820
+ {
821
+ m_Player1OnServer . TheList . Remove ( value ) ;
822
+ }
823
+ }
809
824
810
825
// Verify the element count and values on the client matches the server
811
826
m_NetworkListPredicateHandler . SetNetworkListTestState ( NetworkListTestPredicate . NetworkListTestStates . VerifyData ) ;
812
827
Assert . True ( WaitForConditionOrTimeOutWithTimeTravel ( m_NetworkListPredicateHandler ) ) ;
828
+
829
+ Assert . True ( m_ExpectedValuesServer . Count == 0 , $ "Server was not notified of all elements removed and still has { m_ExpectedValuesServer . Count } elements left!") ;
830
+ Assert . True ( m_ExpectedValuesClient . Count == 0 , $ "Client was not notified of all elements removed and still has { m_ExpectedValuesClient . Count } elements left!") ;
831
+ }
832
+
833
+ private void Server_OnListChanged ( NetworkListEvent < int > changeEvent )
834
+ {
835
+ Assert . True ( m_ExpectedValuesServer . Contains ( changeEvent . Value ) ) ;
836
+ m_ExpectedValuesServer . Remove ( changeEvent . Value ) ;
837
+ }
838
+
839
+ private void Client_OnListChanged ( NetworkListEvent < int > changeEvent )
840
+ {
841
+ Assert . True ( m_ExpectedValuesClient . Contains ( changeEvent . Value ) ) ;
842
+ m_ExpectedValuesClient . Remove ( changeEvent . Value ) ;
813
843
}
814
844
815
845
[ Test ]
816
- public void NetworkListClear ( [ Values ( true , false ) ] bool useHost )
846
+ public void NetworkListClear ( [ Values ] HostOrServer useHost )
817
847
{
818
848
// Re-use the NetworkListAdd to initialize the server and client as well as make sure the list is populated
819
849
NetworkListAdd ( useHost ) ;
@@ -824,7 +854,7 @@ public void NetworkListClear([Values(true, false)] bool useHost)
824
854
}
825
855
826
856
[ Test ]
827
- public void TestNetworkVariableClass ( [ Values ( true , false ) ] bool useHost )
857
+ public void TestNetworkVariableClass ( [ Values ] HostOrServer useHost )
828
858
{
829
859
InitializeServerAndClients ( useHost ) ;
830
860
@@ -843,7 +873,7 @@ bool VerifyClass()
843
873
}
844
874
845
875
[ Test ]
846
- public void TestNetworkVariableTemplateClass ( [ Values ( true , false ) ] bool useHost )
876
+ public void TestNetworkVariableTemplateClass ( [ Values ] HostOrServer useHost )
847
877
{
848
878
InitializeServerAndClients ( useHost ) ;
849
879
@@ -861,7 +891,7 @@ bool VerifyClass()
861
891
}
862
892
863
893
[ Test ]
864
- public void TestNetworkListStruct ( [ Values ( true , false ) ] bool useHost )
894
+ public void TestNetworkListStruct ( [ Values ] HostOrServer useHost )
865
895
{
866
896
InitializeServerAndClients ( useHost ) ;
867
897
@@ -881,7 +911,7 @@ bool VerifyList()
881
911
}
882
912
883
913
[ Test ]
884
- public void TestNetworkVariableStruct ( [ Values ( true , false ) ] bool useHost )
914
+ public void TestNetworkVariableStruct ( [ Values ] HostOrServer useHost )
885
915
{
886
916
InitializeServerAndClients ( useHost ) ;
887
917
@@ -899,7 +929,7 @@ bool VerifyStructure()
899
929
}
900
930
901
931
[ Test ]
902
- public void TestNetworkVariableTemplateStruct ( [ Values ( true , false ) ] bool useHost )
932
+ public void TestNetworkVariableTemplateStruct ( [ Values ] HostOrServer useHost )
903
933
{
904
934
InitializeServerAndClients ( useHost ) ;
905
935
@@ -917,7 +947,7 @@ bool VerifyStructure()
917
947
}
918
948
919
949
[ Test ]
920
- public void TestNetworkVariableTemplateBehaviourClass ( [ Values ( true , false ) ] bool useHost )
950
+ public void TestNetworkVariableTemplateBehaviourClass ( [ Values ] HostOrServer useHost )
921
951
{
922
952
InitializeServerAndClients ( useHost ) ;
923
953
@@ -939,7 +969,7 @@ bool VerifyClass()
939
969
}
940
970
941
971
[ Test ]
942
- public void TestNetworkVariableTemplateBehaviourClassNotReferencedElsewhere ( [ Values ( true , false ) ] bool useHost )
972
+ public void TestNetworkVariableTemplateBehaviourClassNotReferencedElsewhere ( [ Values ] HostOrServer useHost )
943
973
{
944
974
InitializeServerAndClients ( useHost ) ;
945
975
@@ -957,7 +987,7 @@ bool VerifyClass()
957
987
}
958
988
959
989
[ Test ]
960
- public void TestNetworkVariableTemplateBehaviourStruct ( [ Values ( true , false ) ] bool useHost )
990
+ public void TestNetworkVariableTemplateBehaviourStruct ( [ Values ] HostOrServer useHost )
961
991
{
962
992
InitializeServerAndClients ( useHost ) ;
963
993
@@ -975,7 +1005,7 @@ bool VerifyClass()
975
1005
}
976
1006
977
1007
[ Test ]
978
- public void TestNetworkVariableEnum ( [ Values ( true , false ) ] bool useHost )
1008
+ public void TestNetworkVariableEnum ( [ Values ] HostOrServer useHost )
979
1009
{
980
1010
InitializeServerAndClients ( useHost ) ;
981
1011
@@ -992,7 +1022,7 @@ bool VerifyStructure()
992
1022
}
993
1023
994
1024
[ Test ]
995
- public void TestINetworkSerializableClassCallsNetworkSerialize ( [ Values ( true , false ) ] bool useHost )
1025
+ public void TestINetworkSerializableClassCallsNetworkSerialize ( [ Values ] HostOrServer useHost )
996
1026
{
997
1027
InitializeServerAndClients ( useHost ) ;
998
1028
TestClass . NetworkSerializeCalledOnWrite = false ;
@@ -1010,7 +1040,7 @@ public void TestINetworkSerializableClassCallsNetworkSerialize([Values(true, fal
1010
1040
}
1011
1041
1012
1042
[ Test ]
1013
- public void TestINetworkSerializableStructCallsNetworkSerialize ( [ Values ( true , false ) ] bool useHost )
1043
+ public void TestINetworkSerializableStructCallsNetworkSerialize ( [ Values ] HostOrServer useHost )
1014
1044
{
1015
1045
InitializeServerAndClients ( useHost ) ;
1016
1046
TestStruct . NetworkSerializeCalledOnWrite = false ;
@@ -1023,41 +1053,6 @@ public void TestINetworkSerializableStructCallsNetworkSerialize([Values(true, fa
1023
1053
Assert . True ( WaitForConditionOrTimeOutWithTimeTravel ( VerifyCallback ) ) ;
1024
1054
}
1025
1055
1026
- [ Test ]
1027
- [ Ignore ( "This is used several times already in the NetworkListPredicate" ) ]
1028
- // TODO: If we end up using the new suggested pattern, then delete this
1029
- public void NetworkListArrayOperator ( [ Values ( true , false ) ] bool useHost )
1030
- {
1031
- NetworkListAdd ( useHost ) ;
1032
- }
1033
-
1034
- [ Test ]
1035
- [ Ignore ( "This is used several times already in the NetworkListPredicate" ) ]
1036
- // TODO: If we end up using the new suggested pattern, then delete this
1037
- public void NetworkListIEnumerator ( [ Values ( true , false ) ] bool useHost )
1038
- {
1039
- InitializeServerAndClients ( useHost ) ;
1040
- var correctVals = new int [ 3 ] ;
1041
- correctVals [ 0 ] = k_TestVal1 ;
1042
- correctVals [ 1 ] = k_TestVal2 ;
1043
- correctVals [ 2 ] = k_TestVal3 ;
1044
-
1045
- m_Player1OnServer . TheList . Add ( correctVals [ 0 ] ) ;
1046
- m_Player1OnServer . TheList . Add ( correctVals [ 1 ] ) ;
1047
- m_Player1OnServer . TheList . Add ( correctVals [ 2 ] ) ;
1048
-
1049
- Assert . IsTrue ( m_Player1OnServer . TheList . Count == 3 ) ;
1050
-
1051
- int index = 0 ;
1052
- foreach ( var val in m_Player1OnServer . TheList )
1053
- {
1054
- if ( val != correctVals [ index ++ ] )
1055
- {
1056
- Assert . Fail ( ) ;
1057
- }
1058
- }
1059
- }
1060
-
1061
1056
[ Test ]
1062
1057
public void TestUnsupportedManagedTypesThrowExceptions ( )
1063
1058
{
0 commit comments