agones.dev/agones@v1.54.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  }