Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test-e2e - Added several Fatal calls #1629

Merged
merged 2 commits into from
Jun 25, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 88 additions & 47 deletions test/e2e/gameserver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,9 @@ func TestSDKSetLabel(t *testing.T) {
return gs.ObjectMeta.Labels != nil, nil
})

assert.Nil(t, err)
assert.NotEmpty(t, gs.ObjectMeta.Labels["agones.dev/sdk-timestamp"])
if assert.NoError(t, err) {
assert.NotEmpty(t, gs.ObjectMeta.Labels["agones.dev/sdk-timestamp"])
}
}

func TestHealthCheckDisable(t *testing.T) {
Expand All @@ -115,8 +116,8 @@ func TestHealthCheckDisable(t *testing.T) {
time.Sleep(10 * time.Second)

gs, err = framework.AgonesClient.AgonesV1().GameServers(framework.Namespace).Get(readyGs.ObjectMeta.Name, metav1.GetOptions{})
if !assert.NoError(t, err) {
assert.FailNow(t, "gameserver get failed")
if err != nil {
assert.FailNow(t, "gameserver get failed", err.Error())
}

assert.Equal(t, agonesv1.GameServerStateReady, gs.Status.State)
Expand Down Expand Up @@ -168,10 +169,14 @@ func TestUnhealthyGameServerAfterHealthCheckFail(t *testing.T) {
gs.Spec.Health.FailureThreshold = 1

gs, err := framework.CreateGameServerAndWaitUntilReady(framework.Namespace, gs)
assert.NoError(t, err)
if err != nil {
assert.FailNow(t, "Failed to create a gameserver", err.Error())
}

reply, err := e2eframework.SendGameServerUDP(gs, "UNHEALTHY")
assert.NoError(t, err)
if err != nil {
assert.FailNow(t, "Failed to send a message to a gameserver", err.Error())
}
assert.Equal(t, "ACK: UNHEALTHY\n", reply)

_, err = framework.WaitForGameServerState(gs, agonesv1.GameServerStateUnhealthy, time.Minute)
Expand All @@ -181,7 +186,9 @@ func TestUnhealthyGameServerAfterHealthCheckFail(t *testing.T) {
func TestUnhealthyGameServersWithoutFreePorts(t *testing.T) {
t.Parallel()
nodes, err := framework.KubeClient.CoreV1().Nodes().List(metav1.ListOptions{})
assert.Nil(t, err)
if err != nil {
assert.FailNow(t, "Failed to list nodes", err.Error())
}
assert.True(t, len(nodes.Items) > 0)

gs := framework.DefaultGameServer(framework.Namespace)
Expand All @@ -200,7 +207,9 @@ func TestUnhealthyGameServersWithoutFreePorts(t *testing.T) {
}

newGs, err := gameServers.Create(gs.DeepCopy())
assert.NoError(t, err)
if err != nil {
assert.FailNow(t, "Failed to create a gameserver", err.Error())
}

_, err = framework.WaitForGameServerState(newGs, agonesv1.GameServerStateUnhealthy, time.Minute)
assert.NoError(t, err)
Expand All @@ -222,7 +231,9 @@ func TestGameServerUnhealthyAfterDeletingPod(t *testing.T) {
defer gsClient.Delete(readyGs.ObjectMeta.Name, nil) // nolint: errcheck

pod, err := podClient.Get(readyGs.ObjectMeta.Name, metav1.GetOptions{})
assert.NoError(t, err)
if err != nil {
assert.FailNow(t, "Failed to get a pod", err.Error())
}

assert.True(t, metav1.IsControlledBy(pod, readyGs))

Expand All @@ -243,14 +254,16 @@ func TestGameServerRestartBeforeReadyCrash(t *testing.T) {
gs.Spec.Template.Spec.Containers[0].Env = append(gs.Spec.Template.Spec.Containers[0].Env, corev1.EnvVar{Name: "READY", Value: "FALSE"})
gsClient := framework.AgonesClient.AgonesV1().GameServers(framework.Namespace)
newGs, err := gsClient.Create(gs)
if !assert.NoError(t, err) {
assert.Fail(t, "could not create the gameserver")
if err != nil {
assert.Fail(t, "could not create the gameserver", err.Error())
}
defer gsClient.Delete(newGs.ObjectMeta.Name, nil) // nolint: errcheck

logger.Info("Waiting for us to have an address to send things to")
newGs, err = framework.WaitForGameServerState(newGs, agonesv1.GameServerStateScheduled, time.Minute)
assert.NoError(t, err)
if err != nil {
assert.FailNow(t, "Failed schedule a pod", err.Error())
}

logger.WithField("gs", newGs.ObjectMeta.Name).Info("GameServer created")

Expand All @@ -276,7 +289,10 @@ func TestGameServerRestartBeforeReadyCrash(t *testing.T) {

// create a connection each time, as weird stuff happens if the receiver isn't up and running.
conn, err := net.Dial("udp", address)
assert.NoError(t, err)
if err != nil {
logger.WithError(err).Warn("could not create connection")
return true, err
}
defer conn.Close() // nolint: errcheck
// doing this last, so that there is a short delay between the msg being sent, and the check.
logger.WithField("gs", gs.ObjectMeta.Name).WithField("msg", msg).
Expand Down Expand Up @@ -320,9 +336,8 @@ func TestGameServerRestartBeforeReadyCrash(t *testing.T) {
}
return false
})
if err != nil {
assert.FailNowf(t, "Could not make GameServer Ready", "reason: %v", err.Error())
}
assert.NoError(t, err)

// now crash, should be unhealthy, since it's after being Ready
logger.Info("crashing again, should be unhealthy")
// retry on crash, as with the restarts, sometimes Go takes a moment to send this through.
Expand Down Expand Up @@ -438,15 +453,15 @@ func TestGameServerSelfAllocate(t *testing.T) {

assert.Equal(t, readyGs.Status.State, agonesv1.GameServerStateReady)
reply, err := e2eframework.SendGameServerUDP(readyGs, "ALLOCATE")

if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}

assert.Equal(t, "ACK: ALLOCATE\n", reply)
gs, err = framework.WaitForGameServerState(readyGs, agonesv1.GameServerStateAllocated, time.Minute)
assert.NoError(t, err)
assert.Equal(t, agonesv1.GameServerStateAllocated, gs.Status.State)
if assert.NoError(t, err) {
assert.Equal(t, agonesv1.GameServerStateAllocated, gs.Status.State)
}
}

func TestGameServerReadyAllocateReady(t *testing.T) {
Expand All @@ -469,13 +484,14 @@ func TestGameServerReadyAllocateReady(t *testing.T) {
assert.Equal(t, agonesv1.GameServerStateAllocated, gs.Status.State)

reply, err = e2eframework.SendGameServerUDP(readyGs, "READY")
if !assert.NoError(t, err) {
if err != nil {
assert.FailNow(t, "Could not message GameServer")
}
assert.Equal(t, "ACK: READY\n", reply)
gs, err = framework.WaitForGameServerState(gs, agonesv1.GameServerStateReady, time.Minute)
assert.NoError(t, err)
assert.Equal(t, agonesv1.GameServerStateReady, gs.Status.State)
if assert.NoError(t, err) {
assert.Equal(t, agonesv1.GameServerStateReady, gs.Status.State)
}
}

func TestGameServerWithPortsMappedToMultipleContainers(t *testing.T) {
Expand Down Expand Up @@ -571,33 +587,37 @@ func TestGameServerReserve(t *testing.T) {
gs := framework.DefaultGameServer(framework.Namespace)
gs, err := framework.CreateGameServerAndWaitUntilReady(framework.Namespace, gs)
if err != nil {
t.Fatalf("Could not get a GameServer ready: %v", err)
assert.FailNow(t, "Could not get a GameServer ready", err.Error())
}
defer framework.AgonesClient.AgonesV1().GameServers(framework.Namespace).Delete(gs.ObjectMeta.Name, nil) // nolint: errcheck
assert.Equal(t, gs.Status.State, agonesv1.GameServerStateReady)

reply, err := e2eframework.SendGameServerUDP(gs, "RESERVE 0")
if !assert.NoError(t, err) {
assert.FailNow(t, "Could not message GameServer")
if err != nil {
assert.FailNow(t, "Could not message GameServer", err.Error())
}
assert.Equal(t, "ACK: RESERVE 0\n", reply)

gs, err = framework.WaitForGameServerState(gs, agonesv1.GameServerStateReserved, 3*time.Minute)
assert.NoError(t, err)
if err != nil {
assert.FailNow(t, "Time out on waiting for gs in a Reserved state", err.Error())
}

reply, err = e2eframework.SendGameServerUDP(gs, "ALLOCATE")
if !assert.NoError(t, err) {
assert.FailNow(t, "Could not message GameServer")
if err != nil {
assert.FailNow(t, "Could not message GameServer", err.Error())
}
assert.Equal(t, "ACK: ALLOCATE\n", reply)

// put it in a totally different state, just to reset things.
gs, err = framework.WaitForGameServerState(gs, agonesv1.GameServerStateAllocated, 3*time.Minute)
assert.NoError(t, err)
if err != nil {
assert.FailNow(t, "Time out on waiting for gs in an Allocated state", err.Error())
}

reply, err = e2eframework.SendGameServerUDP(gs, "RESERVE 5s")
if !assert.NoError(t, err) {
assert.FailNow(t, "Could not message GameServer")
if err != nil {
assert.FailNow(t, "Could not message GameServer", err.Error())
}
assert.Equal(t, "ACK: RESERVE 5s\n", reply)

Expand Down Expand Up @@ -642,16 +662,17 @@ func TestGameServerEvicted(t *testing.T) {
t.Parallel()
gs := framework.DefaultGameServer(framework.Namespace)
gs.Spec.Template.Spec.Containers[0].Resources.Limits[corev1.ResourceEphemeralStorage] = resource.MustParse("0Mi")
newGs, err := framework.AgonesClient.AgonesV1().GameServers(framework.Namespace).Create(gs)

assert.Nil(t, err, fmt.Sprintf("creating %v GameServer instances failed (%v): %v", gs.Spec, gs.Name, err))
newGs, err := framework.AgonesClient.AgonesV1().GameServers(framework.Namespace).Create(gs)
if err != nil {
assert.FailNow(t, fmt.Sprintf("creating %v GameServer instances failed (%v): %v", gs.Spec, gs.Name, err))
}

logrus.WithField("name", newGs.ObjectMeta.Name).Info("GameServer created, waiting for being Evicted and Unhealthy")

_, err = framework.WaitForGameServerState(newGs, agonesv1.GameServerStateUnhealthy, 5*time.Minute)

assert.Nil(t, err, fmt.Sprintf("waiting for %v GameServer Unhealthy state timed out (%v): %v",
gs.Spec, gs.Name, err))
assert.Nil(t, err, fmt.Sprintf("waiting for %v GameServer Unhealthy state timed out (%v): %v", gs.Spec, gs.Name, err))
}

func TestGameServerPassthroughPort(t *testing.T) {
Expand All @@ -664,8 +685,8 @@ func TestGameServerPassthroughPort(t *testing.T) {
assert.True(t, valid)

readyGs, err := framework.CreateGameServerAndWaitUntilReady(framework.Namespace, gs)
if !assert.NoError(t, err) {
assert.FailNow(t, "Could not get a GameServer ready")
if err != nil {
assert.FailNow(t, "Could not get a GameServer ready", err.Error())
}

port := readyGs.Spec.Ports[0]
Expand Down Expand Up @@ -728,7 +749,9 @@ func TestGameServerSetPlayerCapacity(t *testing.T) {
assert.Equal(t, int64(0), gs.Status.Players.Capacity)

reply, err := e2eframework.SendGameServerUDP(gs, "PLAYER_CAPACITY")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.Equal(t, "0\n", reply)

reply, err = e2eframework.SendGameServerUDP(gs, "PLAYER_CAPACITY 20")
Expand All @@ -738,7 +761,9 @@ func TestGameServerSetPlayerCapacity(t *testing.T) {
assert.Equal(t, "ACK: PLAYER_CAPACITY 20\n", reply)

reply, err = e2eframework.SendGameServerUDP(gs, "PLAYER_CAPACITY")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.Equal(t, "20\n", reply)

err = wait.PollImmediate(time.Second, time.Minute, func() (bool, error) {
Expand All @@ -762,7 +787,9 @@ func TestGameServerSetPlayerCapacity(t *testing.T) {
assert.Equal(t, int64(10), gs.Status.Players.Capacity)

reply, err := e2eframework.SendGameServerUDP(gs, "PLAYER_CAPACITY")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.Equal(t, "10\n", reply)

reply, err = e2eframework.SendGameServerUDP(gs, "PLAYER_CAPACITY 20")
Expand All @@ -772,7 +799,9 @@ func TestGameServerSetPlayerCapacity(t *testing.T) {
assert.Equal(t, "ACK: PLAYER_CAPACITY 20\n", reply)

reply, err = e2eframework.SendGameServerUDP(gs, "PLAYER_CAPACITY")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.Equal(t, "20\n", reply)

err = wait.PollImmediate(time.Second, time.Minute, func() (bool, error) {
Expand Down Expand Up @@ -818,15 +847,21 @@ func TestPlayerConnectAndDisconnect(t *testing.T) {
// deliberately do this before polling, to test the SDK returning the correct
// results before it is committed to the GameServer resource.
reply, err := e2eframework.SendGameServerUDP(gs, "PLAYER_CONNECTED 1")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.Equal(t, "true\n", reply)

reply, err = e2eframework.SendGameServerUDP(gs, "GET_PLAYERS")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.ElementsMatch(t, []string{"1", "2", "3"}, strings.Split(strings.TrimSpace(reply), ","))

reply, err = e2eframework.SendGameServerUDP(gs, "PLAYER_COUNT")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.Equal(t, "3\n", reply)

err = wait.Poll(time.Second, time.Minute, func() (bool, error) {
Expand All @@ -848,15 +883,21 @@ func TestPlayerConnectAndDisconnect(t *testing.T) {
assert.Equal(t, "ACK: PLAYER_DISCONNECT 2\n", reply)

reply, err = e2eframework.SendGameServerUDP(gs, "PLAYER_CONNECTED 2")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.Equal(t, "false\n", reply)

reply, err = e2eframework.SendGameServerUDP(gs, "GET_PLAYERS")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.ElementsMatch(t, []string{"1", "3"}, strings.Split(strings.TrimSpace(reply), ","))

reply, err = e2eframework.SendGameServerUDP(gs, "PLAYER_COUNT")
assert.NoError(t, err)
if err != nil {
t.Fatalf("Could not message GameServer: %v", err)
}
assert.Equal(t, "2\n", reply)

err = wait.Poll(time.Second, time.Minute, func() (bool, error) {
Expand Down