From d914f0182903856bc025f8ef9c3e61e8e7f4620b Mon Sep 17 00:00:00 2001 From: Chelsea Mafrica Date: Fri, 24 Jul 2020 01:15:15 +0000 Subject: [PATCH 1/3] virtcontainers: Move unit tests for types/sandbox.go Move unit tests that were in virtcontainers/sandbox_test.go relating to Socket, Volume, and SandboxState to types/sandbox_test.go. Change testSandboxStateTransition function to use SandboxState only instead of Sandbox from virtcontainers/sandbox.go. Fixes #435 Signed-off-by: Chelsea Mafrica --- .../virtcontainers/types/sandbox_test.go | 215 ++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 src/runtime/virtcontainers/types/sandbox_test.go diff --git a/src/runtime/virtcontainers/types/sandbox_test.go b/src/runtime/virtcontainers/types/sandbox_test.go new file mode 100644 index 0000000000..875eee1a13 --- /dev/null +++ b/src/runtime/virtcontainers/types/sandbox_test.go @@ -0,0 +1,215 @@ +// Copyright (c) 2020 Intel Corporation +// +// SPDX-License-Identifier: Apache-2.0 +// + +package types + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func testSandboxStateTransition(t *testing.T, state StateString, newState StateString) error { + s := SandboxState{ + State: state, + } + + return s.ValidTransition(state, newState) +} + +func TestSandboxStateReadyRunning(t *testing.T) { + err := testSandboxStateTransition(t, StateReady, StateRunning) + assert.NoError(t, err) +} + +func TestSandboxStateRunningPaused(t *testing.T) { + err := testSandboxStateTransition(t, StateRunning, StatePaused) + assert.NoError(t, err) +} + +func TestSandboxStatePausedRunning(t *testing.T) { + err := testSandboxStateTransition(t, StatePaused, StateRunning) + assert.NoError(t, err) +} + +func TestSandboxStatePausedStopped(t *testing.T) { + err := testSandboxStateTransition(t, StatePaused, StateStopped) + assert.NoError(t, err) +} + +func TestSandboxStateRunningStopped(t *testing.T) { + err := testSandboxStateTransition(t, StateRunning, StateStopped) + assert.NoError(t, err) +} + +func TestSandboxStateReadyPaused(t *testing.T) { + err := testSandboxStateTransition(t, StateReady, StateStopped) + assert.NoError(t, err) +} + +func TestSandboxStatePausedReady(t *testing.T) { + err := testSandboxStateTransition(t, StateStopped, StateReady) + assert.Error(t, err) +} + +func testStateValid(t *testing.T, stateStr StateString, expected bool) { + state := &SandboxState{ + State: stateStr, + } + + ok := state.Valid() + assert.Equal(t, ok, expected) +} + +func TestStateValidSuccessful(t *testing.T) { + testStateValid(t, StateReady, true) + testStateValid(t, StateRunning, true) + testStateValid(t, StatePaused, true) + testStateValid(t, StateStopped, true) +} + +func TestStateValidFailing(t *testing.T) { + testStateValid(t, "", false) +} + +func TestValidTransitionFailingOldStateMismatch(t *testing.T) { + state := &SandboxState{ + State: StateReady, + } + + err := state.ValidTransition(StateRunning, StateStopped) + assert.Error(t, err) +} + +func TestVolumesSetSuccessful(t *testing.T) { + volumes := &Volumes{} + + volStr := "mountTag1:hostPath1 mountTag2:hostPath2" + + expected := Volumes{ + { + MountTag: "mountTag1", + HostPath: "hostPath1", + }, + { + MountTag: "mountTag2", + HostPath: "hostPath2", + }, + } + + err := volumes.Set(volStr) + assert.NoError(t, err) + assert.Exactly(t, *volumes, expected) +} + +func TestVolumesSetFailingTooFewArguments(t *testing.T) { + volumes := &Volumes{} + + volStr := "mountTag1 mountTag2" + + err := volumes.Set(volStr) + assert.Error(t, err) +} + +func TestVolumesSetFailingTooManyArguments(t *testing.T) { + volumes := &Volumes{} + + volStr := "mountTag1:hostPath1:Foo1 mountTag2:hostPath2:Foo2" + + err := volumes.Set(volStr) + assert.Error(t, err) +} + +func TestVolumesSetFailingVoidArguments(t *testing.T) { + volumes := &Volumes{} + + volStr := ": : :" + + err := volumes.Set(volStr) + assert.Error(t, err) +} + +func TestVolumesStringSuccessful(t *testing.T) { + volumes := &Volumes{ + { + MountTag: "mountTag1", + HostPath: "hostPath1", + }, + { + MountTag: "mountTag2", + HostPath: "hostPath2", + }, + } + + expected := "mountTag1:hostPath1 mountTag2:hostPath2" + + result := volumes.String() + assert.Equal(t, result, expected) +} + +func TestSocketsSetSuccessful(t *testing.T) { + sockets := &Sockets{} + + sockStr := "devID1:id1:hostPath1:Name1 devID2:id2:hostPath2:Name2" + + expected := Sockets{ + { + DeviceID: "devID1", + ID: "id1", + HostPath: "hostPath1", + Name: "Name1", + }, + { + DeviceID: "devID2", + ID: "id2", + HostPath: "hostPath2", + Name: "Name2", + }, + } + + err := sockets.Set(sockStr) + assert.NoError(t, err) + assert.Exactly(t, *sockets, expected) +} + +func TestSocketsSetFailingWrongArgsAmount(t *testing.T) { + sockets := &Sockets{} + + sockStr := "devID1:id1:hostPath1" + + err := sockets.Set(sockStr) + assert.Error(t, err) +} + +func TestSocketsSetFailingVoidArguments(t *testing.T) { + sockets := &Sockets{} + + sockStr := ":::" + + err := sockets.Set(sockStr) + assert.Error(t, err) +} + +func TestSocketsStringSuccessful(t *testing.T) { + sockets := &Sockets{ + { + DeviceID: "devID1", + ID: "id1", + HostPath: "hostPath1", + Name: "Name1", + }, + { + DeviceID: "devID2", + ID: "id2", + HostPath: "hostPath2", + Name: "Name2", + }, + } + + expected := "devID1:id1:hostPath1:Name1 devID2:id2:hostPath2:Name2" + + result := sockets.String() + assert.Equal(t, result, expected) +} From 07a307b4b1568f0b995db348ade01d05567fa771 Mon Sep 17 00:00:00 2001 From: Chelsea Mafrica Date: Fri, 24 Jul 2020 01:17:34 +0000 Subject: [PATCH 2/3] virtcontainers: Remove duplicate unit tests Remove tests from virtcontainers/sandbox_test.go which were moved to virtcontainers/types/sandbox_test.go. Signed-off-by: Chelsea Mafrica --- src/runtime/virtcontainers/sandbox_test.go | 209 --------------------- 1 file changed, 209 deletions(-) diff --git a/src/runtime/virtcontainers/sandbox_test.go b/src/runtime/virtcontainers/sandbox_test.go index d2ec1920ad..4af47ffaec 100644 --- a/src/runtime/virtcontainers/sandbox_test.go +++ b/src/runtime/virtcontainers/sandbox_test.go @@ -169,215 +169,6 @@ func TestCreateSandboxEmptyID(t *testing.T) { defer cleanUp() } -func testSandboxStateTransition(t *testing.T, state types.StateString, newState types.StateString) error { - hConfig := newHypervisorConfig(nil, nil) - - p, err := testCreateSandbox(t, testSandboxID, MockHypervisor, hConfig, NetworkConfig{}, nil, nil) - assert.NoError(t, err) - defer cleanUp() - - p.state = types.SandboxState{ - State: state, - } - - return p.state.ValidTransition(state, newState) -} - -func TestSandboxStateReadyRunning(t *testing.T) { - err := testSandboxStateTransition(t, types.StateReady, types.StateRunning) - assert.NoError(t, err) -} - -func TestSandboxStateRunningPaused(t *testing.T) { - err := testSandboxStateTransition(t, types.StateRunning, types.StatePaused) - assert.NoError(t, err) -} - -func TestSandboxStatePausedRunning(t *testing.T) { - err := testSandboxStateTransition(t, types.StatePaused, types.StateRunning) - assert.NoError(t, err) -} - -func TestSandboxStatePausedStopped(t *testing.T) { - err := testSandboxStateTransition(t, types.StatePaused, types.StateStopped) - assert.NoError(t, err) -} - -func TestSandboxStateRunningStopped(t *testing.T) { - err := testSandboxStateTransition(t, types.StateRunning, types.StateStopped) - assert.NoError(t, err) -} - -func TestSandboxStateReadyPaused(t *testing.T) { - err := testSandboxStateTransition(t, types.StateReady, types.StateStopped) - assert.NoError(t, err) -} - -func TestSandboxStatePausedReady(t *testing.T) { - err := testSandboxStateTransition(t, types.StateStopped, types.StateReady) - assert.Error(t, err) -} - -func testStateValid(t *testing.T, stateStr types.StateString, expected bool) { - state := &types.SandboxState{ - State: stateStr, - } - - ok := state.Valid() - assert.Equal(t, ok, expected) -} - -func TestStateValidSuccessful(t *testing.T) { - testStateValid(t, types.StateReady, true) - testStateValid(t, types.StateRunning, true) - testStateValid(t, types.StatePaused, true) - testStateValid(t, types.StateStopped, true) -} - -func TestStateValidFailing(t *testing.T) { - testStateValid(t, "", false) -} - -func TestValidTransitionFailingOldStateMismatch(t *testing.T) { - state := &types.SandboxState{ - State: types.StateReady, - } - - err := state.ValidTransition(types.StateRunning, types.StateStopped) - assert.Error(t, err) -} - -func TestVolumesSetSuccessful(t *testing.T) { - volumes := &types.Volumes{} - - volStr := "mountTag1:hostPath1 mountTag2:hostPath2" - - expected := types.Volumes{ - { - MountTag: "mountTag1", - HostPath: "hostPath1", - }, - { - MountTag: "mountTag2", - HostPath: "hostPath2", - }, - } - - err := volumes.Set(volStr) - assert.NoError(t, err) - assert.Exactly(t, *volumes, expected) -} - -func TestVolumesSetFailingTooFewArguments(t *testing.T) { - volumes := &types.Volumes{} - - volStr := "mountTag1 mountTag2" - - err := volumes.Set(volStr) - assert.Error(t, err) -} - -func TestVolumesSetFailingTooManyArguments(t *testing.T) { - volumes := &types.Volumes{} - - volStr := "mountTag1:hostPath1:Foo1 mountTag2:hostPath2:Foo2" - - err := volumes.Set(volStr) - assert.Error(t, err) -} - -func TestVolumesSetFailingVoidArguments(t *testing.T) { - volumes := &types.Volumes{} - - volStr := ": : :" - - err := volumes.Set(volStr) - assert.Error(t, err) -} - -func TestVolumesStringSuccessful(t *testing.T) { - volumes := &types.Volumes{ - { - MountTag: "mountTag1", - HostPath: "hostPath1", - }, - { - MountTag: "mountTag2", - HostPath: "hostPath2", - }, - } - - expected := "mountTag1:hostPath1 mountTag2:hostPath2" - - result := volumes.String() - assert.Equal(t, result, expected) -} - -func TestSocketsSetSuccessful(t *testing.T) { - sockets := &types.Sockets{} - - sockStr := "devID1:id1:hostPath1:Name1 devID2:id2:hostPath2:Name2" - - expected := types.Sockets{ - { - DeviceID: "devID1", - ID: "id1", - HostPath: "hostPath1", - Name: "Name1", - }, - { - DeviceID: "devID2", - ID: "id2", - HostPath: "hostPath2", - Name: "Name2", - }, - } - - err := sockets.Set(sockStr) - assert.NoError(t, err) - assert.Exactly(t, *sockets, expected) -} - -func TestSocketsSetFailingWrongArgsAmount(t *testing.T) { - sockets := &types.Sockets{} - - sockStr := "devID1:id1:hostPath1" - - err := sockets.Set(sockStr) - assert.Error(t, err) -} - -func TestSocketsSetFailingVoidArguments(t *testing.T) { - sockets := &types.Sockets{} - - sockStr := ":::" - - err := sockets.Set(sockStr) - assert.Error(t, err) -} - -func TestSocketsStringSuccessful(t *testing.T) { - sockets := &types.Sockets{ - { - DeviceID: "devID1", - ID: "id1", - HostPath: "hostPath1", - Name: "Name1", - }, - { - DeviceID: "devID2", - ID: "id2", - HostPath: "hostPath2", - Name: "Name2", - }, - } - - expected := "devID1:id1:hostPath1:Name1 devID2:id2:hostPath2:Name2" - - result := sockets.String() - assert.Equal(t, result, expected) -} - func TestSandboxListSuccessful(t *testing.T) { sandbox := &Sandbox{} From 0b3cbee8158f7b69ee12f8d8a6fdcb747ba9ba36 Mon Sep 17 00:00:00 2001 From: Chelsea Mafrica Date: Fri, 24 Jul 2020 02:57:41 +0000 Subject: [PATCH 3/3] virtcontainers: Add additional unit tests for sandbox Add tests for state change, empty string failures for Volumes and Sockets. Change two function names to accurately reflect tests. Signed-off-by: Chelsea Mafrica --- .../virtcontainers/types/sandbox_test.go | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/runtime/virtcontainers/types/sandbox_test.go b/src/runtime/virtcontainers/types/sandbox_test.go index 875eee1a13..05075e4495 100644 --- a/src/runtime/virtcontainers/types/sandbox_test.go +++ b/src/runtime/virtcontainers/types/sandbox_test.go @@ -44,12 +44,17 @@ func TestSandboxStateRunningStopped(t *testing.T) { assert.NoError(t, err) } -func TestSandboxStateReadyPaused(t *testing.T) { +func TestSandboxStateReadyStopped(t *testing.T) { err := testSandboxStateTransition(t, StateReady, StateStopped) assert.NoError(t, err) } -func TestSandboxStatePausedReady(t *testing.T) { +func TestSandboxStateStoppedRunning(t *testing.T) { + err := testSandboxStateTransition(t, StateStopped, StateRunning) + assert.NoError(t, err) +} + +func TestSandboxStateStoppedReady(t *testing.T) { err := testSandboxStateTransition(t, StateStopped, StateReady) assert.Error(t, err) } @@ -104,6 +109,15 @@ func TestVolumesSetSuccessful(t *testing.T) { assert.Exactly(t, *volumes, expected) } +func TestVolumesSetFailingEmptyString(t *testing.T) { + volumes := &Volumes{} + + volStr := "" + + err := volumes.Set(volStr) + assert.Error(t, err) +} + func TestVolumesSetFailingTooFewArguments(t *testing.T) { volumes := &Volumes{} @@ -174,6 +188,15 @@ func TestSocketsSetSuccessful(t *testing.T) { assert.Exactly(t, *sockets, expected) } +func TestSocketsSetFailingEmptyString(t *testing.T) { + sockets := &Sockets{} + + sockStr := "" + + err := sockets.Set(sockStr) + assert.Error(t, err) +} + func TestSocketsSetFailingWrongArgsAmount(t *testing.T) { sockets := &Sockets{}