// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. package utils import ( "bytes" "encoding/base64" "io/ioutil" "os" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestValidateLicense(t *testing.T) { t.Run("should fail with junk data", func(t *testing.T) { b1 := []byte("junk") ok, _ := LicenseValidator.ValidateLicense(b1) require.False(t, ok, "should have failed - bad license") b2 := []byte("junkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunkjunk") ok, _ = LicenseValidator.ValidateLicense(b2) require.False(t, ok, "should have failed - bad license") }) t.Run("should not panic on shorted than expected input", func(t *testing.T) { var licenseData bytes.Buffer var inputData []byte for i := 0; i < 255; i++ { inputData = append(inputData, 'A') } inputData = append(inputData, 0x00) encoder := base64.NewEncoder(base64.StdEncoding, &licenseData) _, err := encoder.Write(inputData) require.NoError(t, err) err = encoder.Close() require.NoError(t, err) ok, str := LicenseValidator.ValidateLicense(licenseData.Bytes()) require.False(t, ok) require.Empty(t, str) }) t.Run("should not panic with input filled of null terminators", func(t *testing.T) { var licenseData bytes.Buffer var inputData []byte for i := 0; i < 256; i++ { inputData = append(inputData, 0x00) } encoder := base64.NewEncoder(base64.StdEncoding, &licenseData) _, err := encoder.Write(inputData) require.NoError(t, err) err = encoder.Close() require.NoError(t, err) ok, str := LicenseValidator.ValidateLicense(licenseData.Bytes()) require.False(t, ok) require.Empty(t, str) }) } func TestGetLicenseFileLocation(t *testing.T) { fileName := GetLicenseFileLocation("") require.NotEmpty(t, fileName, "invalid default file name") fileName = GetLicenseFileLocation("mattermost.mattermost-license") require.Equal(t, fileName, "mattermost.mattermost-license", "invalid file name") } func TestGetLicenseFileFromDisk(t *testing.T) { t.Run("missing file", func(t *testing.T) { fileBytes := GetLicenseFileFromDisk("thisfileshouldnotexist.mattermost-license") assert.Empty(t, fileBytes, "invalid bytes") }) t.Run("not a license file", func(t *testing.T) { f, err := ioutil.TempFile("", "TestGetLicenseFileFromDisk") require.NoError(t, err) defer os.Remove(f.Name()) ioutil.WriteFile(f.Name(), []byte("not a license"), 0777) fileBytes := GetLicenseFileFromDisk(f.Name()) require.NotEmpty(t, fileBytes, "should have read the file") success, _ := LicenseValidator.ValidateLicense(fileBytes) assert.False(t, success, "should have been an invalid file") }) }