agones.dev/agones@v1.53.0/test/sdk/csharp/Program.cs (about)

     1  // Copyright 2023 Google LLC All Rights Reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  using Agones;
    15  using Grpc.Core;
    16  
    17  using var sdk = new AgonesSDK();
    18  {
    19      sdk.WatchGameServer((gameServer) =>
    20      {
    21          Console.WriteLine("Received GameServer update");
    22          Console.WriteLine(gameServer);
    23      });
    24  }
    25  
    26  {
    27      var status = await sdk.ReadyAsync();
    28      if (status.StatusCode != StatusCode.OK)
    29      {
    30          Console.Error.WriteLine(
    31              $"Could not send ready message. StatusCode={status.StatusCode}, Detail={status.Detail}");
    32          Environment.Exit(1);
    33      }
    34  }
    35  
    36  {
    37      var status = await sdk.ReserveAsync(5);
    38      if (status.StatusCode != StatusCode.OK)
    39      {
    40          Console.Error.WriteLine(
    41              $"Could not send reserve command. StatusCode={status.StatusCode}, Detail={status.Detail}");
    42          Environment.Exit(1);
    43      }
    44  }
    45  
    46  {
    47      var status = await sdk.AllocateAsync();
    48      if (status.StatusCode != StatusCode.OK)
    49      {
    50          Console.Error.WriteLine(
    51              $"Err sending allocate request. StatusCode={status.StatusCode}, Detail={status.Detail}");
    52          Environment.Exit(1);
    53      }
    54  }
    55  
    56  {
    57      var status = await sdk.HealthAsync();
    58      if (status.StatusCode != StatusCode.OK)
    59      {
    60          Console.Error.WriteLine(
    61              $"Could not send health check. StatusCode={status.StatusCode}, Detail={status.Detail}");
    62          Environment.Exit(1);
    63      }
    64  }
    65  
    66  {
    67      var gameServer = await sdk.GetGameServerAsync();
    68      Console.WriteLine("Successfully GameServer");
    69      Console.WriteLine(gameServer);
    70      {
    71          var status = await sdk.SetLabelAsync("creationTimestamp",
    72              gameServer.ObjectMeta.CreationTimestamp.ToString());
    73          if (status.StatusCode != StatusCode.OK)
    74          {
    75              Console.Error.WriteLine(
    76                  $"Could not set label. StatusCode={status.StatusCode}, Detail={status.Detail}");
    77              Environment.Exit(1);
    78          }
    79      }
    80      {
    81          var status = await sdk.SetAnnotationAsync("UID", gameServer.ObjectMeta.Uid);
    82          if (status.StatusCode != StatusCode.OK)
    83          {
    84              Console.Error.WriteLine(
    85                  $"Could not set annotation. StatusCode={status.StatusCode}, Detail={status.Detail}");
    86              Environment.Exit(1);
    87          }
    88      }
    89  }
    90  
    91  var featureGates = Environment.GetEnvironmentVariable("FEATURE_GATES") ?? "";
    92  if (featureGates.Contains("PlayerTracking"))
    93  {
    94      var alpha = sdk.Alpha();
    95      var capacity = 10;
    96      var playerId = "1234";
    97  
    98      {
    99          var status = await alpha.SetPlayerCapacityAsync(capacity);
   100          if (status.StatusCode != StatusCode.OK)
   101          {
   102              Console.Error.WriteLine(
   103                  $"Error setting player capacity. StatusCode={status.StatusCode}, Detail={status.Detail}");
   104              Environment.Exit(1);
   105          }
   106      }
   107  
   108      {
   109          var c = await alpha.GetPlayerCapacityAsync();
   110          if (c != capacity)
   111          {
   112              Console.Error.WriteLine(
   113                  $"Player Capacity should be {capacity}, but is {c}");
   114              Environment.Exit(1);
   115          }
   116      }
   117  
   118      {
   119          var ok = await alpha.PlayerConnectAsync(playerId);
   120          if (!ok)
   121          {
   122              Console.Error.WriteLine(
   123                  $"PlayerConnect returned false");
   124              Environment.Exit(1);
   125          }
   126      }
   127  
   128      {
   129          var ok = await alpha.IsPlayerConnectedAsync(playerId);
   130          if (!ok)
   131          {
   132              Console.Error.WriteLine(
   133                  $"IsPlayerConnected returned false");
   134              Environment.Exit(1);
   135          }
   136      }
   137  
   138      {
   139          var players = await alpha.GetConnectedPlayersAsync();
   140          if (players.Count == 0)
   141          {
   142              Console.Error.WriteLine(
   143                  $"No connected players returned");
   144              Environment.Exit(1);
   145          }
   146      }
   147  
   148      {
   149          var ok = await alpha.PlayerDisconnectAsync(playerId);
   150          if (!ok)
   151          {
   152              Console.Error.WriteLine(
   153                  $"PlayerDisconnect returned false");
   154              Environment.Exit(1);
   155          }
   156      }
   157  
   158      {
   159          var c = await alpha.GetPlayerCountAsync();
   160          if (c != 0)
   161          {
   162              Console.Error.WriteLine(
   163                  $"Player Count should be 0, but is {c}");
   164              Environment.Exit(1);
   165          }
   166      }
   167  }
   168  
   169  if (featureGates.Contains("CountsAndLists"))
   170  // Tests are expected to run sequentially on the same pre-defined Counter in the localsdk server
   171  {
   172      var beta = sdk.Beta();
   173      var key = "rooms";
   174  
   175      {
   176          var wantCount = 1;
   177          var task = beta.GetCounterCountAsync(key);
   178          task.Wait();
   179          var gotCount = task.Result;
   180          if (wantCount != gotCount)
   181          {
   182              Console.Error.WriteLine($"Counter count should be {wantCount}, but is {gotCount}");
   183              Environment.Exit(1);
   184          }
   185      }
   186  
   187      {
   188          var wantCount = 10;
   189          var increment = 9;
   190          try
   191          {
   192              var task = beta.IncrementCounterAsync(key, increment);
   193              task.Wait();
   194          }
   195          catch (Exception e)
   196          {
   197              Console.Error.WriteLine($"IncrementCounterAsync for Counter {key} did not increment. Error: {e.ToString()}");
   198              Environment.Exit(1);
   199          }
   200  
   201          var getTask = beta.GetCounterCountAsync(key);
   202          getTask.Wait();
   203          var gotCount = getTask.Result;
   204          if (wantCount != gotCount)
   205          {
   206              Console.Error.WriteLine($"Counter count should be {wantCount}, but is {gotCount}");
   207              Environment.Exit(1);
   208          }
   209      }
   210  
   211      {
   212          var wantCount = 5;
   213          var decrement = 5;
   214          try
   215          {
   216              var task = beta.DecrementCounterAsync(key, decrement);
   217              task.Wait();
   218          }
   219          catch (Exception e)
   220          {
   221              Console.Error.WriteLine($"DecrementCounterAsync for Counter {key} did not decrement. Error: {e.ToString()}");
   222              Environment.Exit(1);
   223          }
   224  
   225          var getTask = beta.GetCounterCountAsync(key);
   226          getTask.Wait();
   227          var gotCount = getTask.Result;
   228          if (wantCount != gotCount)
   229          {
   230              Console.Error.WriteLine($"Counter count should be {wantCount}, but is {gotCount}");
   231              Environment.Exit(1);
   232          }
   233      }
   234  
   235      {
   236          var wantCount = 3;
   237          try
   238          {
   239              var task = beta.SetCounterCountAsync(key, wantCount);
   240              task.Wait();
   241          }
   242          catch (Exception e)
   243          {
   244              Console.Error.WriteLine($"SetCounterCountAsync for Counter {key} did not set. Error: {e.ToString()}");
   245              Environment.Exit(1);
   246          }
   247  
   248          var getTask = beta.GetCounterCountAsync(key);
   249          getTask.Wait();
   250          var gotCount = getTask.Result;
   251          if (wantCount != gotCount)
   252          {
   253              Console.Error.WriteLine($"Counter count should be {wantCount}, but is {gotCount}");
   254              Environment.Exit(1);
   255          }
   256      }
   257  
   258      {
   259          var wantCapacity = 10;
   260          var task = beta.GetCounterCapacityAsync(key);
   261          task.Wait();
   262          var gotCapacity = task.Result;
   263          if (wantCapacity != gotCapacity)
   264          {
   265              Console.Error.WriteLine($"Counter capacity should be {wantCapacity}, but is {gotCapacity}");
   266              Environment.Exit(1);
   267          }
   268      }
   269  
   270  
   271      {
   272          var wantCapacity = 0;
   273          try
   274          {
   275              var task = beta.SetCounterCapacityAsync(key, wantCapacity);
   276              task.Wait();
   277          }
   278          catch (Exception e)
   279          {
   280              Console.Error.WriteLine($"SetCounterCapacityAsync for Counter {key} did not set. Error: {e.ToString()}");
   281              Environment.Exit(1);
   282          }
   283  
   284          var getTask = beta.GetCounterCapacityAsync(key);
   285          getTask.Wait();
   286          var gotCapacity = getTask.Result;
   287          if (wantCapacity != gotCapacity)
   288          {
   289              Console.Error.WriteLine($"Counter capacity should be {wantCapacity}, but is {gotCapacity}");
   290              Environment.Exit(1);
   291          }
   292      }
   293  }
   294  
   295  if (featureGates.Contains("CountsAndLists"))
   296  // Tests are expected to run sequentially on the same pre-defined List in the localsdk server
   297  {
   298      var beta = sdk.Beta();
   299      var key = "players";
   300  
   301      {
   302          var wantCapacity = 100;
   303          var task = beta.GetListCapacityAsync(key);
   304          task.Wait();
   305          var gotCapacity = task.Result;
   306          if (wantCapacity != gotCapacity)
   307          {
   308              Console.Error.WriteLine($"List capacity should be {wantCapacity}, but is {gotCapacity}");
   309              Environment.Exit(1);
   310          }
   311      }
   312  
   313      {
   314          var wantCapacity = 10;
   315          try
   316          {
   317              var task = beta.SetListCapacityAsync(key, wantCapacity);
   318              task.Wait();
   319          }
   320          catch (Exception e)
   321          {
   322              Console.Error.WriteLine($"SetListCapacityAsync for List {key} did not set. Error: {e.ToString()}");
   323              Environment.Exit(1);
   324          }
   325  
   326          var getTask = beta.GetListCapacityAsync(key);
   327          getTask.Wait();
   328          var gotCapacity = getTask.Result;
   329          if (wantCapacity != gotCapacity)
   330          {
   331              Console.Error.WriteLine($"List capacity should be {wantCapacity}, but is {gotCapacity}");
   332              Environment.Exit(1);
   333          }
   334      }
   335  
   336      {
   337          var value = "foo";
   338          var want = false;
   339          var task = beta.ListContainsAsync(key, value);
   340          task.Wait();
   341          var got = task.Result;
   342          if (want != got)
   343          {
   344              Console.Error.WriteLine($"ListContains expected {want} for value {value}, but got {got}");
   345              Environment.Exit(1);
   346          }
   347          value = "test1";
   348          want = true;
   349          task = beta.ListContainsAsync(key, value);
   350          task.Wait();
   351          got = task.Result;
   352          if (want != got)
   353          {
   354              Console.Error.WriteLine($"ListContains expected {want} for value {value}, but got {got}");
   355              Environment.Exit(1);
   356          }
   357      }
   358  
   359      {
   360          IList<string> wantValues = new List<string> { "test0", "test1", "test2" };
   361          var task = beta.GetListValuesAsync(key);
   362          task.Wait();
   363          var gotValues = task.Result;
   364          var equal = Enumerable.SequenceEqual(wantValues, gotValues);
   365          if (!equal)
   366          {
   367              var wantStr = String.Join(" ", wantValues);
   368              var gotStr = String.Join(" ", gotValues);
   369              Console.Error.WriteLine($"List values should be {wantStr}, but is {gotStr}");
   370              Environment.Exit(1);
   371          }
   372      }
   373  
   374      {
   375          var addValue = "test3";
   376          IList<string> wantValues = new List<string> { "test0", "test1", "test2", "test3" };
   377          try
   378          {
   379              var task = beta.AppendListValueAsync(key, addValue);
   380              task.Wait();
   381          }
   382          catch (Exception e)
   383          {
   384              Console.Error.WriteLine($"AppendListValueAsync for List {key} did not append {addValue}. Error: {e.ToString()}");
   385              Environment.Exit(1);
   386          }
   387  
   388          var getTask = beta.GetListValuesAsync(key);
   389          getTask.Wait();
   390          var gotValues = getTask.Result;
   391          var equal = Enumerable.SequenceEqual(wantValues, gotValues);
   392          if (!equal)
   393          {
   394              var wantStr = String.Join(" ", wantValues);
   395              var gotStr = String.Join(" ", gotValues);
   396              Console.Error.WriteLine($"List values should be {wantStr}, but is {gotStr}");
   397              Environment.Exit(1);
   398          }
   399      }
   400  
   401      {
   402          var removeValue = "test2";
   403          IList<string> wantValues = new List<string> { "test0", "test1", "test3" };
   404          try
   405          {
   406              var task = beta.DeleteListValueAsync(key, removeValue);
   407              task.Wait();
   408          }
   409          catch (Exception e)
   410          {
   411              Console.Error.WriteLine($"DeleteListValueAsync for List {key} did not delete {removeValue}. Error: {e.ToString()}");
   412              Environment.Exit(1);
   413          }
   414  
   415          var getTask = beta.GetListValuesAsync(key);
   416          getTask.Wait();
   417          var gotValues = getTask.Result;
   418          var equal = Enumerable.SequenceEqual(wantValues, gotValues);
   419          if (!equal)
   420          {
   421              var wantStr = String.Join(" ", wantValues);
   422              var gotStr = String.Join(" ", gotValues);
   423              Console.Error.WriteLine($"List values should be {wantStr}, but is {gotStr}");
   424              Environment.Exit(1);
   425          }
   426      }
   427  }
   428  
   429  var shutDownStatus = await sdk.ShutDownAsync();
   430  if (shutDownStatus.StatusCode != StatusCode.OK)
   431  {
   432      Console.Error.WriteLine(
   433          $"Could not shutdown GameServer. StatusCode={shutDownStatus.StatusCode}, Detail={shutDownStatus.Detail}");
   434      Environment.Exit(1);
   435  }
   436  
   437  Console.WriteLine("Finish all tests");