applications/leaderboard/LeaderboardTest/Tests.cs (99 lines of code) (raw):

// Copyright(c) 2019 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. using Google.Cloud.Spanner.Data; using System; using System.Threading; using System.Threading.Tasks; using System.Text.RegularExpressions; using Xunit; using Xunit.Sdk; using Grpc.Core; namespace GoogleCloudSamples.Leaderboard { public class LeaderboardFixture : IDisposable { public void Dispose() { try { // Delete database created from running the tests. CommandLineRunner runner = new CommandLineRunner() { Main = Program.Main, Command = "Leaderboard" }; runner.Run("delete", ProjectId, InstanceId, DatabaseId); } catch (RpcException ex) when (ex.Status.StatusCode == StatusCode.NotFound) { } } public string ProjectId { get; private set; } = Environment.GetEnvironmentVariable("GOOGLE_PROJECT_ID"); // Allow environment variables to override the default instance and database names. public string InstanceId { get; private set; } = Environment.GetEnvironmentVariable("TEST_SPANNER_INSTANCE") ?? "my-instance"; private static readonly string s_randomDatabaseName = "my-db-" + TestUtil.RandomName(); public string DatabaseId = Environment.GetEnvironmentVariable("TEST_SPANNER_DATABASE") ?? s_randomDatabaseName; public bool s_initializedDatabase { get; set; } = false; } public class LeaderboardTests : IClassFixture<LeaderboardFixture> { readonly LeaderboardFixture _fixture; readonly CommandLineRunner _spannerCmd = new CommandLineRunner() { Main = Program.Main, Command = "Leaderboard" }; public LeaderboardTests(LeaderboardFixture fixture) { _fixture = fixture; lock (this) { if (!_fixture.s_initializedDatabase) { _fixture.s_initializedDatabase = true; InitializeDatabase(); } } } void InitializeDatabase() { // If the database has not been initialized, retry. _spannerCmd.Run("create", _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId); } [Fact] void TestLeaderboard() { // Insert Player records. ConsoleOutput insertOutput = _spannerCmd.Run("insert", _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId, "players"); Assert.Equal(0, insertOutput.ExitCode); // Insert Scores records. ConsoleOutput insertScoresOutput = _spannerCmd.Run("insert", _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId, "scores"); Assert.Equal(0, insertScoresOutput.ExitCode); insertScoresOutput = _spannerCmd.Run("insert", _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId, "scores"); Assert.Equal(0, insertScoresOutput.ExitCode); insertScoresOutput = _spannerCmd.Run("insert", _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId, "scores"); Assert.Equal(0, insertScoresOutput.ExitCode); // Query Top Ten Players of all time. ConsoleOutput queryOutput = _spannerCmd.Run("query", _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId); Assert.Equal(0, queryOutput.ExitCode); Assert.Contains("PlayerId :", queryOutput.Stdout); // Confirm output includes valid timestamps. string columnText = "Timestamp : "; string[] result = queryOutput.Stdout.Split( new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); string valueToTest = result[0].Substring(result[0].IndexOf(columnText) + columnText.Length); DateTime value; Assert.True(DateTime.TryParse(valueToTest, out value)); // Test that Top Ten Players of the Year (within past 8760 hours) runs successfully. ConsoleOutput queryTopTenOfYearOutput = _spannerCmd.Run("query", _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId, "8760"); Assert.Equal(0, queryTopTenOfYearOutput.ExitCode); // Test that Top Ten Players of the Month (within past 730 hours) runs successfully. ConsoleOutput queryTopTenOfMonthOutput = _spannerCmd.Run("query", _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId, "730"); Assert.Equal(0, queryTopTenOfMonthOutput.ExitCode); // Test that Top Ten Players of the Week (within past 168 hours) runs successfully. ConsoleOutput queryTopTenOfWeekOutput = _spannerCmd.Run("query", _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId, "168"); Assert.Equal(0, queryTopTenOfWeekOutput.ExitCode); } } }