//go:build unit // +build unit // Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"). You may // not use this file except in compliance with the License. A copy of the // License is located at // // http://aws.amazon.com/apache2.0/ // // or in the "license" file accompanying this file. This file 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. package types import ( "encoding/json" "testing" "github.com/aws/amazon-ecs-agent/agent/taskresource" "github.com/aws/amazon-ecs-agent/agent/taskresource/asmsecret" "github.com/aws/amazon-ecs-agent/agent/taskresource/ssmsecret" resourcestatus "github.com/aws/amazon-ecs-agent/agent/taskresource/status" "github.com/aws/amazon-ecs-agent/agent/taskresource/volume" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) const ( secretKeyWest1 = "/test/secretName_us-west-2" asmSecretKeyWest1 = "arn:aws:secretsmanager:us-west-2:11111:secret:/test/secretName_us-west-2" ) func TestMarshalUnmarshalVolumeResource(t *testing.T) { resources := make(map[string][]taskresource.TaskResource) volumes := []taskresource.TaskResource{ &volume.VolumeResource{ Name: "test-volume", VolumeConfig: volume.DockerVolumeConfig{ DockerVolumeName: "test-volume-docker", Scope: "task", Autoprovision: true, Driver: "local", }, }, } volumes[0].SetDesiredStatus(resourcestatus.ResourceCreated) volumes[0].SetKnownStatus(resourcestatus.ResourceStatusNone) resources["dockerVolume"] = volumes data, err := json.Marshal(resources) require.NoError(t, err) var unMarshalledResource ResourcesMap err = json.Unmarshal(data, &unMarshalledResource) assert.NoError(t, err, "unmarshal volume resource from data failed") unMarshalledVolumes, ok := unMarshalledResource["dockerVolume"] assert.True(t, ok, "volume resource not found in the resource map") assert.Equal(t, unMarshalledVolumes[0].GetName(), "test-volume") assert.Equal(t, unMarshalledVolumes[0].GetDesiredStatus(), resourcestatus.ResourceCreated) assert.Equal(t, unMarshalledVolumes[0].GetKnownStatus(), resourcestatus.ResourceStatusNone) } func TestMarshalUnmarshalSSMSecretResource(t *testing.T) { resources := make(map[string][]taskresource.TaskResource) ssmSecrets := []taskresource.TaskResource{ &ssmsecret.SSMSecretResource{}, } ssmSecrets[0].SetDesiredStatus(resourcestatus.ResourceCreated) ssmSecrets[0].SetKnownStatus(resourcestatus.ResourceStatusNone) resources["ssmsecret"] = ssmSecrets data, err := json.Marshal(resources) require.NoError(t, err) var unMarshalledResource ResourcesMap err = json.Unmarshal(data, &unMarshalledResource) assert.NoError(t, err) unMarshalledSSMSecret, ok := unMarshalledResource["ssmsecret"] assert.True(t, ok) assert.Equal(t, unMarshalledSSMSecret[0].GetDesiredStatus(), resourcestatus.ResourceCreated) assert.Equal(t, unMarshalledSSMSecret[0].GetKnownStatus(), resourcestatus.ResourceStatusNone) } func TestMarshalUnmarshalASMSecretResource(t *testing.T) { resources := make(map[string][]taskresource.TaskResource) asmSecrets := []taskresource.TaskResource{ &asmsecret.ASMSecretResource{}, } asmSecrets[0].SetDesiredStatus(resourcestatus.ResourceCreated) asmSecrets[0].SetKnownStatus(resourcestatus.ResourceStatusNone) resources["asmsecret"] = asmSecrets data, err := json.Marshal(resources) require.NoError(t, err) var unMarshalledResource ResourcesMap err = json.Unmarshal(data, &unMarshalledResource) assert.NoError(t, err) unMarshalledASMSecret, ok := unMarshalledResource["asmsecret"] assert.True(t, ok) assert.Equal(t, unMarshalledASMSecret[0].GetDesiredStatus(), resourcestatus.ResourceCreated) assert.Equal(t, unMarshalledASMSecret[0].GetKnownStatus(), resourcestatus.ResourceStatusNone) }