146 lines
3.8 KiB
Go
146 lines
3.8 KiB
Go
package runner
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
|
|
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
|
"github.com/hashicorp/vagrant/internal/server/singleprocess"
|
|
)
|
|
|
|
func TestRunnerStart(t *testing.T) {
|
|
require := require.New(t)
|
|
ctx := context.Background()
|
|
client := singleprocess.TestServer(t)
|
|
|
|
// Initialize our runner
|
|
runner, err := New(
|
|
WithClient(client),
|
|
)
|
|
require.NoError(err)
|
|
defer runner.Close()
|
|
|
|
// The runner should not be registered
|
|
_, err = client.GetRunner(ctx, &vagrant_server.GetRunnerRequest{RunnerId: runner.Id()})
|
|
require.Error(err)
|
|
require.Equal(codes.NotFound, status.Code(err))
|
|
|
|
// Start it
|
|
require.NoError(runner.Start())
|
|
|
|
// The runner should be registered
|
|
resp, err := client.GetRunner(ctx, &vagrant_server.GetRunnerRequest{RunnerId: runner.Id()})
|
|
require.NoError(err)
|
|
require.Equal(runner.Id(), resp.Id)
|
|
|
|
// Close
|
|
require.NoError(runner.Close())
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
// The runner should not be registered
|
|
_, err = client.GetRunner(ctx, &vagrant_server.GetRunnerRequest{RunnerId: runner.Id()})
|
|
require.Error(err)
|
|
require.Equal(codes.NotFound, status.Code(err))
|
|
}
|
|
|
|
func TestRunnerStart_config(t *testing.T) {
|
|
t.Run("set and unset", func(t *testing.T) {
|
|
require := require.New(t)
|
|
ctx := context.Background()
|
|
client := singleprocess.TestServer(t)
|
|
|
|
cfgVar := &vagrant_server.ConfigVar{
|
|
Scope: &vagrant_server.ConfigVar_Runner{
|
|
Runner: &vagrant_server.Ref_Runner{
|
|
Target: &vagrant_server.Ref_Runner_Any{
|
|
Any: &vagrant_server.Ref_RunnerAny{},
|
|
},
|
|
},
|
|
},
|
|
|
|
Name: "I_AM_A_TEST_VALUE",
|
|
Value: "1234567890",
|
|
}
|
|
|
|
// Initialize our runner
|
|
runner := TestRunner(t, WithClient(client))
|
|
defer runner.Close()
|
|
require.NoError(runner.Start())
|
|
|
|
// Verify it is not set
|
|
require.Empty(os.Getenv(cfgVar.Name))
|
|
|
|
// Set some config
|
|
_, err := client.SetConfig(ctx, &vagrant_server.ConfigSetRequest{Variables: []*vagrant_server.ConfigVar{cfgVar}})
|
|
require.NoError(err)
|
|
|
|
// Should be set
|
|
require.Eventually(func() bool {
|
|
return os.Getenv(cfgVar.Name) == cfgVar.Value
|
|
}, 1000*time.Millisecond, 50*time.Millisecond)
|
|
|
|
// Unset
|
|
cfgVar.Value = ""
|
|
_, err = client.SetConfig(ctx, &vagrant_server.ConfigSetRequest{Variables: []*vagrant_server.ConfigVar{cfgVar}})
|
|
require.NoError(err)
|
|
|
|
// Should be unset
|
|
require.Eventually(func() bool {
|
|
return os.Getenv(cfgVar.Name) == ""
|
|
}, 1000*time.Millisecond, 50*time.Millisecond)
|
|
})
|
|
|
|
t.Run("unset with original env", func(t *testing.T) {
|
|
require := require.New(t)
|
|
ctx := context.Background()
|
|
client := singleprocess.TestServer(t)
|
|
|
|
cfgVar := &vagrant_server.ConfigVar{
|
|
Scope: &vagrant_server.ConfigVar_Runner{
|
|
Runner: &vagrant_server.Ref_Runner{
|
|
Target: &vagrant_server.Ref_Runner_Any{
|
|
Any: &vagrant_server.Ref_RunnerAny{},
|
|
},
|
|
},
|
|
},
|
|
|
|
Name: "I_AM_A_TEST_VALUE",
|
|
Value: "1234567890",
|
|
}
|
|
|
|
// Set a value
|
|
require.NoError(os.Setenv(cfgVar.Name, "ORIGINAL"))
|
|
defer os.Unsetenv(cfgVar.Name)
|
|
|
|
// Initialize our runner
|
|
runner := TestRunner(t, WithClient(client))
|
|
defer runner.Close()
|
|
require.NoError(runner.Start())
|
|
|
|
// Set some config
|
|
_, err := client.SetConfig(ctx, &vagrant_server.ConfigSetRequest{Variables: []*vagrant_server.ConfigVar{cfgVar}})
|
|
require.NoError(err)
|
|
|
|
// Should be set
|
|
require.Eventually(func() bool {
|
|
return os.Getenv(cfgVar.Name) == cfgVar.Value
|
|
}, 1000*time.Millisecond, 50*time.Millisecond)
|
|
|
|
// Unset
|
|
cfgVar.Value = ""
|
|
_, err = client.SetConfig(ctx, &vagrant_server.ConfigSetRequest{Variables: []*vagrant_server.ConfigVar{cfgVar}})
|
|
require.NoError(err)
|
|
|
|
// Should be unset back to original value
|
|
require.Eventually(func() bool {
|
|
return os.Getenv(cfgVar.Name) == "ORIGINAL"
|
|
}, 1000*time.Millisecond, 50*time.Millisecond)
|
|
})
|
|
}
|