94 lines
3.9 KiB
Go
94 lines
3.9 KiB
Go
// -*- Mode: Go; indent-tabs-mode: t -*-
|
|
//
|
|
// # Copyright (C) 2023 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package provision
|
|
|
|
import (
|
|
"github.com/edgexfoundry/device-sdk-go/v4/internal/cache"
|
|
"github.com/edgexfoundry/go-mod-bootstrap/v4/bootstrap/interfaces"
|
|
"github.com/edgexfoundry/go-mod-core-contracts/v4/clients/logger"
|
|
"github.com/edgexfoundry/go-mod-core-contracts/v4/dtos"
|
|
"github.com/edgexfoundry/go-mod-core-contracts/v4/dtos/requests"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"net/url"
|
|
"path"
|
|
"testing"
|
|
)
|
|
|
|
func Test_processProvisionWatcherFile(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
path string
|
|
secretProvider interfaces.SecretProvider
|
|
expectedNumProvisionWatchers int
|
|
}{
|
|
{"valid load provision watcher from file", path.Join("..", "..", "example", "cmd", "device-gps", "res", "provisionwatchers", "Simple-Provision-Watcher.yml"), nil, 1},
|
|
{"valid load provision watcher from valid uri", "https://raw.githubusercontent.com/edgexfoundry/device-sdk-go/main/example/cmd/device-simple/res/provisionwatchers/Simple-Provision-Watcher.yml", nil, 1},
|
|
{"invalid load provision watcher empty path", "", nil, 0},
|
|
{"invalid load provision watcher from file", path.Join("..", "..", "example", "cmd", "device-gps", "res", "provisionwatchers", "bogus.yml"), nil, 0},
|
|
{"invalid load provision watcher from invalid uri", "https://raw.githubusercontent.com/edgexfoundry/device-sdk-go/main/example/cmd/device-simple/res/provisionwatchers/bogus.yml", nil, 0},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
var addProvisionWatchersReq []requests.AddProvisionWatcherRequest
|
|
lc := logger.MockLogger{}
|
|
dic, _ := NewMockDIC()
|
|
err := cache.InitCache(TestDeviceService, TestDeviceService, dic)
|
|
require.NoError(t, err)
|
|
addProvisionWatchersReq = processProvisionWatcherFile(tt.path, tt.path, tt.secretProvider, lc)
|
|
assert.Equal(t, tt.expectedNumProvisionWatchers, len(addProvisionWatchersReq))
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_loadProvisionWatchersFromURI(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
path string
|
|
cachedWatcher *dtos.ProvisionWatcher
|
|
secretProvider interfaces.SecretProvider
|
|
expectedNumProvisionWatchers int
|
|
expectedEdgexErrMsg string
|
|
}{
|
|
{"valid load from uri",
|
|
"https://raw.githubusercontent.com/edgexfoundry/device-sdk-go/main/internal/provision/uri-test-files/provisionwatchers/index.json",
|
|
nil,
|
|
nil,
|
|
2, ""},
|
|
{"valid load from uri with existing provision watcher",
|
|
"https://raw.githubusercontent.com/edgexfoundry/device-sdk-go/main/internal/provision/uri-test-files/provisionwatchers/index.json",
|
|
&dtos.ProvisionWatcher{Name: "Simple-Provision-Watcher"},
|
|
nil,
|
|
1, ""},
|
|
{"invalid load from uri",
|
|
"https://raw.githubusercontent.com/edgexfoundry/device-sdk-go/main/internal/provision/uri-test-files/provisionwatchers/bogus.json",
|
|
nil,
|
|
nil,
|
|
0, "failed to load Provision Watchers list from URI"},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
var addProvisionWatchersReq []requests.AddProvisionWatcherRequest
|
|
lc := logger.MockLogger{}
|
|
dic, _ := NewMockDIC()
|
|
edgexErr := cache.InitCache(TestDeviceService, TestDeviceService, dic)
|
|
require.NoError(t, edgexErr)
|
|
if tt.cachedWatcher != nil {
|
|
req := requests.NewAddProvisionWatcherRequest(*tt.cachedWatcher)
|
|
edgexErr := cache.ProvisionWatchers().Add(dtos.ToProvisionWatcherModel(req.ProvisionWatcher))
|
|
require.NoError(t, edgexErr)
|
|
}
|
|
parsedURI, err := url.Parse(tt.path)
|
|
require.NoError(t, err)
|
|
addProvisionWatchersReq, edgexErr = loadProvisionWatchersFromURI(tt.path, parsedURI, tt.secretProvider, lc)
|
|
assert.Equal(t, tt.expectedNumProvisionWatchers, len(addProvisionWatchersReq))
|
|
if edgexErr != nil {
|
|
assert.Contains(t, edgexErr.Error(), tt.expectedEdgexErrMsg)
|
|
}
|
|
})
|
|
}
|
|
}
|