mirror of
https://github.com/hashicorp/terraform.git
synced 2026-03-21 10:00:09 -04:00
85 lines
2 KiB
Go
85 lines
2 KiB
Go
// Copyright IBM Corp. 2014, 2026
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package rpcapi
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/terraform/internal/rpcapi/terraform1/setup"
|
|
)
|
|
|
|
func TestSetupServer_Handshake(t *testing.T) {
|
|
called := 0
|
|
server := newSetupServer(func(ctx context.Context, req *setup.Handshake_Request, stopper *stopper) (*setup.ServerCapabilities, error) {
|
|
called++
|
|
if got, want := req.Config.Credentials["localterraform.com"].Token, "boop"; got != want {
|
|
t.Fatalf("incorrect token. got %q, want %q", got, want)
|
|
}
|
|
return &setup.ServerCapabilities{}, nil
|
|
})
|
|
|
|
req := &setup.Handshake_Request{
|
|
Capabilities: &setup.ClientCapabilities{},
|
|
Config: &setup.Config{
|
|
Credentials: map[string]*setup.HostCredential{
|
|
"localterraform.com": {
|
|
Token: "boop",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
_, err := server.Handshake(context.Background(), req)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
if called != 1 {
|
|
t.Errorf("unexpected initOthers call count %d, want 1", called)
|
|
}
|
|
|
|
_, err = server.Handshake(context.Background(), req)
|
|
if err == nil || !strings.Contains(err.Error(), "handshake already completed") {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
if called != 1 {
|
|
t.Errorf("unexpected initOthers call count %d, want 1", called)
|
|
}
|
|
}
|
|
|
|
func TestSetupServer_Stop(t *testing.T) {
|
|
var s *stopper
|
|
server := newSetupServer(func(ctx context.Context, req *setup.Handshake_Request, stopper *stopper) (*setup.ServerCapabilities, error) {
|
|
s = stopper
|
|
return &setup.ServerCapabilities{}, nil
|
|
})
|
|
_, err := server.Handshake(context.Background(), nil)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
if s == nil {
|
|
t.Fatal("stopper not passed to initOthers")
|
|
}
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
var stops []stopChan
|
|
for range 2 {
|
|
stops = append(stops, s.add())
|
|
wg.Add(1)
|
|
}
|
|
|
|
for _, stop := range stops {
|
|
stop := stop
|
|
go func() {
|
|
<-stop
|
|
wg.Done()
|
|
}()
|
|
}
|
|
|
|
server.Stop(context.Background(), nil)
|
|
|
|
wg.Wait()
|
|
}
|