agones.dev/agones@v1.53.0/pkg/sdkserver/sdk_test.go (about) 1 // Copyright 2018 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 15 package sdkserver 16 17 import ( 18 "testing" 19 20 agonesv1 "agones.dev/agones/pkg/apis/agones/v1" 21 "agones.dev/agones/pkg/sdk" 22 "agones.dev/agones/pkg/util/runtime" 23 "github.com/stretchr/testify/assert" 24 corev1 "k8s.io/api/core/v1" 25 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 26 ) 27 28 func TestConvert(t *testing.T) { 29 t.Parallel() 30 31 runtime.FeatureTestMutex.Lock() 32 defer runtime.FeatureTestMutex.Unlock() 33 34 fixture := &agonesv1.GameServer{ 35 ObjectMeta: metav1.ObjectMeta{ 36 CreationTimestamp: metav1.Now(), 37 Namespace: "default", 38 Name: "test", 39 Labels: map[string]string{"foo": "bar"}, 40 Annotations: map[string]string{"stuff": "things"}, 41 UID: "1234", 42 }, 43 Spec: agonesv1.GameServerSpec{ 44 Health: agonesv1.Health{ 45 Disabled: false, 46 InitialDelaySeconds: 10, 47 FailureThreshold: 15, 48 PeriodSeconds: 20, 49 }, 50 }, 51 Status: agonesv1.GameServerStatus{ 52 NodeName: "george", 53 Address: "127.0.0.1", 54 Addresses: []corev1.NodeAddress{{Type: "SomeAddressType", Address: "127.0.0.1"}}, 55 State: "Ready", 56 Ports: []agonesv1.GameServerStatusPort{ 57 {Name: "default", Port: 12345}, 58 {Name: "beacon", Port: 123123}, 59 }, 60 }, 61 } 62 63 eq := func(t *testing.T, fixture *agonesv1.GameServer, sdkGs *sdk.GameServer) { 64 assert.Equal(t, fixture.ObjectMeta.Name, sdkGs.ObjectMeta.Name) 65 assert.Equal(t, fixture.ObjectMeta.Namespace, sdkGs.ObjectMeta.Namespace) 66 assert.Equal(t, fixture.ObjectMeta.CreationTimestamp.Unix(), sdkGs.ObjectMeta.CreationTimestamp) 67 assert.Equal(t, string(fixture.ObjectMeta.UID), sdkGs.ObjectMeta.Uid) 68 assert.Equal(t, fixture.ObjectMeta.Labels, sdkGs.ObjectMeta.Labels) 69 assert.Equal(t, fixture.ObjectMeta.Annotations, sdkGs.ObjectMeta.Annotations) 70 assert.Equal(t, fixture.Spec.Health.Disabled, sdkGs.Spec.Health.Disabled) 71 assert.Equal(t, fixture.Spec.Health.InitialDelaySeconds, sdkGs.Spec.Health.InitialDelaySeconds) 72 assert.Equal(t, fixture.Spec.Health.FailureThreshold, sdkGs.Spec.Health.FailureThreshold) 73 assert.Equal(t, fixture.Spec.Health.PeriodSeconds, sdkGs.Spec.Health.PeriodSeconds) 74 assert.Equal(t, fixture.Status.Address, sdkGs.Status.Address) 75 assert.Equal(t, []*sdk.GameServer_Status_Address{{Type: "SomeAddressType", Address: "127.0.0.1"}}, sdkGs.Status.Addresses) 76 assert.Equal(t, string(fixture.Status.State), sdkGs.Status.State) 77 assert.Len(t, sdkGs.Status.Ports, len(fixture.Status.Ports)) 78 for i, fp := range fixture.Status.Ports { 79 p := sdkGs.Status.Ports[i] 80 assert.Equal(t, fp.Name, p.Name) 81 assert.Equal(t, fp.Port, p.Port) 82 } 83 } 84 85 t.Run(string(runtime.FeaturePlayerTracking)+" disabled", func(t *testing.T) { 86 assert.NoError(t, runtime.ParseFeatures("")) 87 88 gs := fixture.DeepCopy() 89 90 sdkGs := convert(gs) 91 eq(t, fixture, sdkGs) 92 assert.Zero(t, sdkGs.ObjectMeta.DeletionTimestamp) 93 assert.Nil(t, sdkGs.Status.Players) 94 }) 95 96 t.Run(string(runtime.FeaturePlayerTracking)+" enabled", func(t *testing.T) { 97 assert.NoError(t, runtime.ParseFeatures(string(runtime.FeaturePlayerTracking)+"=true")) 98 99 gs := fixture.DeepCopy() 100 gs.Status.Players = &agonesv1.PlayerStatus{Capacity: 10, Count: 5, IDs: []string{"one", "two"}} 101 102 sdkGs := convert(gs) 103 eq(t, fixture, sdkGs) 104 assert.Zero(t, sdkGs.ObjectMeta.DeletionTimestamp) 105 assert.Equal(t, gs.Status.Players.Capacity, sdkGs.Status.Players.Capacity) 106 assert.Equal(t, gs.Status.Players.Count, sdkGs.Status.Players.Count) 107 assert.Equal(t, gs.Status.Players.IDs, sdkGs.Status.Players.Ids) 108 }) 109 110 t.Run(string(runtime.FeatureCountsAndLists)+" disabled", func(t *testing.T) { 111 assert.NoError(t, runtime.ParseFeatures("")) 112 113 gs := fixture.DeepCopy() 114 115 sdkGs := convert(gs) 116 eq(t, fixture, sdkGs) 117 assert.Zero(t, sdkGs.ObjectMeta.DeletionTimestamp) 118 assert.Nil(t, sdkGs.Status.Counters) 119 assert.Nil(t, sdkGs.Status.Lists) 120 }) 121 122 t.Run(string(runtime.FeatureCountsAndLists)+" enabled", func(t *testing.T) { 123 assert.NoError(t, runtime.ParseFeatures(string(runtime.FeatureCountsAndLists)+"=true")) 124 125 gs := fixture.DeepCopy() 126 gs.Status.Counters = map[string]agonesv1.CounterStatus{ 127 "Games": { 128 Count: 1, 129 Capacity: 999, 130 }, 131 } 132 gs.Status.Lists = map[string]agonesv1.ListStatus{ 133 "Lobbies": { 134 Capacity: 100, 135 Values: []string{"Lobby1", "Lobby2", "Lobby0"}, 136 }, 137 } 138 139 sdkGs := convert(gs) 140 eq(t, fixture, sdkGs) 141 assert.Zero(t, sdkGs.ObjectMeta.DeletionTimestamp) 142 assert.Equal(t, gs.Status.Counters["Games"].Count, sdkGs.Status.Counters["Games"].Count) 143 assert.Equal(t, gs.Status.Counters["Games"].Capacity, sdkGs.Status.Counters["Games"].Capacity) 144 // Using assert.Equal for List Values here to check for items and item order equal in the List. 145 assert.Equal(t, gs.Status.Lists["Lobbies"].Values, sdkGs.Status.Lists["Lobbies"].Values) 146 assert.Equal(t, gs.Status.Lists["Lobbies"].Capacity, sdkGs.Status.Lists["Lobbies"].Capacity) 147 }) 148 149 t.Run("DeletionTimestamp", func(t *testing.T) { 150 gs := fixture.DeepCopy() 151 152 now := metav1.Now() 153 gs.DeletionTimestamp = &now 154 sdkGs := convert(gs) 155 eq(t, gs, sdkGs) 156 assert.Equal(t, gs.ObjectMeta.DeletionTimestamp.Unix(), sdkGs.ObjectMeta.DeletionTimestamp) 157 }) 158 }