You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
6.4 KiB
174 lines
6.4 KiB
package remote_cache
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// TestRemoteConfigureBasic tests creating and listing remote configurations
|
|
func TestRemoteConfigureBasic(t *testing.T) {
|
|
checkServersRunning(t)
|
|
|
|
// Use only letters to match validation regex ^[A-Za-z][A-Za-z0-9]*$
|
|
testName := "testremote"
|
|
|
|
// Create a new remote configuration
|
|
t.Log("Creating remote configuration...")
|
|
cmd := fmt.Sprintf("remote.configure -name=%s -type=s3 -s3.access_key=%s -s3.secret_key=%s -s3.endpoint=http://localhost:%s -s3.region=us-east-1",
|
|
testName, accessKey, secretKey, "8334")
|
|
output, err := runWeedShellWithOutput(t, cmd)
|
|
require.NoError(t, err, "failed to create remote configuration")
|
|
t.Logf("Configure output: %s", output)
|
|
|
|
// List configurations and verify it exists
|
|
t.Log("Listing remote configurations...")
|
|
time.Sleep(500 * time.Millisecond) // Give some time for configuration to persist
|
|
output, err = runWeedShellWithOutput(t, "remote.configure")
|
|
require.NoError(t, err, "failed to list configurations")
|
|
assert.Contains(t, output, testName, "configuration not found in list")
|
|
t.Logf("List output: %s", output)
|
|
|
|
// Clean up - delete the configuration
|
|
t.Log("Deleting remote configuration...")
|
|
cmd = fmt.Sprintf("remote.configure -name=%s -delete=true", testName)
|
|
_, err = runWeedShellWithOutput(t, cmd)
|
|
require.NoError(t, err, "failed to delete configuration")
|
|
}
|
|
|
|
// TestRemoteConfigureInvalidName tests name validation
|
|
func TestRemoteConfigureInvalidName(t *testing.T) {
|
|
checkServersRunning(t)
|
|
|
|
invalidNames := []string{
|
|
"test-remote", // contains hyphen
|
|
"123test", // starts with number
|
|
"test remote", // contains space
|
|
"test@remote", // contains special char
|
|
}
|
|
|
|
for _, name := range invalidNames {
|
|
t.Run(name, func(t *testing.T) {
|
|
cmd := fmt.Sprintf("remote.configure -name='%s' -type=s3 -s3.access_key=%s -s3.secret_key=%s -s3.endpoint=http://localhost:8334",
|
|
name, accessKey, secretKey)
|
|
output, err := runWeedShellWithOutput(t, cmd)
|
|
|
|
// Should fail with invalid name
|
|
hasError := err != nil || strings.Contains(strings.ToLower(output), "invalid") || strings.Contains(strings.ToLower(output), "error")
|
|
assert.True(t, hasError, "Expected error for invalid name '%s', but command succeeded with output: %s", name, output)
|
|
t.Logf("Invalid name '%s' output: %s", name, output)
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestRemoteConfigureUpdate tests updating an existing configuration
|
|
func TestRemoteConfigureUpdate(t *testing.T) {
|
|
checkServersRunning(t)
|
|
|
|
// Use only letters
|
|
testName := "testupdate"
|
|
|
|
// Create initial configuration
|
|
t.Log("Creating initial configuration...")
|
|
cmd := fmt.Sprintf("remote.configure -name=%s -type=s3 -s3.access_key=%s -s3.secret_key=%s -s3.endpoint=http://localhost:8334 -s3.region=us-east-1",
|
|
testName, accessKey, secretKey)
|
|
_, err := runWeedShellWithOutput(t, cmd)
|
|
require.NoError(t, err, "failed to create initial configuration")
|
|
|
|
// Update with different region
|
|
t.Log("Updating configuration...")
|
|
cmd = fmt.Sprintf("remote.configure -name=%s -type=s3 -s3.access_key=%s -s3.secret_key=%s -s3.endpoint=http://localhost:8334 -s3.region=us-west-2",
|
|
testName, accessKey, secretKey)
|
|
output, err := runWeedShellWithOutput(t, cmd)
|
|
require.NoError(t, err, "failed to update configuration")
|
|
t.Logf("Update output: %s", output)
|
|
|
|
// Verify update
|
|
output, err = runWeedShellWithOutput(t, "remote.configure")
|
|
require.NoError(t, err, "failed to list configurations")
|
|
assert.Contains(t, output, testName, "configuration not found after update")
|
|
|
|
// Clean up
|
|
cmd = fmt.Sprintf("remote.configure -name=%s -delete=true", testName)
|
|
_, err = runWeedShellWithOutput(t, cmd)
|
|
require.NoError(t, err, "failed to delete configuration")
|
|
}
|
|
|
|
// TestRemoteConfigureDelete tests deleting a configuration
|
|
func TestRemoteConfigureDelete(t *testing.T) {
|
|
checkServersRunning(t)
|
|
|
|
// Use only letters
|
|
testName := "testdelete"
|
|
|
|
// Create configuration
|
|
cmd := fmt.Sprintf("remote.configure -name=%s -type=s3 -s3.access_key=%s -s3.secret_key=%s -s3.endpoint=http://localhost:8334 -s3.region=us-east-1",
|
|
testName, accessKey, secretKey)
|
|
_, err := runWeedShellWithOutput(t, cmd)
|
|
require.NoError(t, err, "failed to create configuration")
|
|
|
|
// Delete it
|
|
t.Log("Deleting configuration...")
|
|
cmd = fmt.Sprintf("remote.configure -name=%s -delete=true", testName)
|
|
output, err := runWeedShellWithOutput(t, cmd)
|
|
require.NoError(t, err, "failed to delete configuration")
|
|
t.Logf("Delete output: %s", output)
|
|
|
|
// Verify it's gone
|
|
output, err = runWeedShellWithOutput(t, "remote.configure")
|
|
require.NoError(t, err, "failed to list configurations")
|
|
assert.NotContains(t, output, testName, "configuration still exists after deletion")
|
|
}
|
|
|
|
// TestRemoteConfigureMissingParams tests missing required parameters
|
|
// Note: The command may not strictly validate all parameters, so we just verify it doesn't crash
|
|
func TestRemoteConfigureMissingParams(t *testing.T) {
|
|
checkServersRunning(t)
|
|
|
|
// Use only letters
|
|
testName := "testmissing"
|
|
|
|
testCases := []struct {
|
|
name string
|
|
command string
|
|
}{
|
|
{
|
|
name: "missing_access_key",
|
|
command: fmt.Sprintf("remote.configure -name=%s -type=s3 -s3.secret_key=%s -s3.endpoint=http://localhost:8334", testName, secretKey),
|
|
},
|
|
{
|
|
name: "missing_secret_key",
|
|
command: fmt.Sprintf("remote.configure -name=%s -type=s3 -s3.access_key=%s -s3.endpoint=http://localhost:8334", testName, accessKey),
|
|
},
|
|
{
|
|
name: "missing_type",
|
|
command: fmt.Sprintf("remote.configure -name=%s -s3.access_key=%s -s3.secret_key=%s -s3.endpoint=http://localhost:8334", testName, accessKey, secretKey),
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
output, err := runWeedShellWithOutput(t, tc.command)
|
|
// Just log the result - the command may or may not validate strictly
|
|
t.Logf("Test case %s: err=%v, output: %s", tc.name, err, output)
|
|
// The main goal is to ensure the command doesn't crash
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestRemoteConfigureListEmpty tests listing when no configurations exist
|
|
func TestRemoteConfigureListEmpty(t *testing.T) {
|
|
checkServersRunning(t)
|
|
|
|
// Just list configurations - should not error even if empty
|
|
output, err := runWeedShellWithOutput(t, "remote.configure")
|
|
require.NoError(t, err, "failed to list configurations")
|
|
t.Logf("List output: %s", output)
|
|
|
|
// Output should contain some indication of configurations or be empty
|
|
// This is mainly to ensure the command doesn't crash
|
|
}
|