// Copyright 2020 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 artifact

import (
	"path/filepath"
	"testing"

	"github.com/aws/amazon-ssm-agent/agent/appconfig"
	"github.com/aws/amazon-ssm-agent/agent/mocks/context"
	"github.com/aws/amazon-ssm-agent/agent/mocks/log"
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/suite"
)

type ArtifactTestSuite struct {
	suite.Suite
	contextMock *context.Mock
	logMock     *log.Mock
	artifact    *Artifact
	appConfig   appconfig.SsmagentConfig
}

// SetupTest will initialized the object for each test case before test function execution
func (suite *ArtifactTestSuite) SetupTest() {
	suite.contextMock = context.NewMockDefault()
	suite.logMock = log.NewMockLog()
	suite.appConfig = appconfig.SsmagentConfig{}
	suite.artifact = NewSelfUpdateArtifact(suite.logMock, suite.appConfig)
}

func (suite *ArtifactTestSuite) TestMd5HashValue() {
	path := filepath.Join("testdata", "checksum_hash.txt")
	content, err := suite.artifact.md5HashValue(path)
	assert.Nil(suite.T(), err)
	assert.NotEqual(suite.T(), len(content), 0)
}

func (suite *ArtifactTestSuite) TestSha256HashValue() {
	path := filepath.Join("testdata", "checksum_hash.txt")
	content, err := suite.artifact.sha256HashValue(path)
	assert.Nil(suite.T(), err)
	assert.NotEqual(suite.T(), len(content), 0)
}

// Execute the test suite
func TestSelfUpdateTestSuite(t *testing.T) {
	suite.Run(t, new(ArtifactTestSuite))
}
