vaguerent/internal/server/singleprocess/service_logs_test.go
2022-04-25 12:23:57 -05:00

161 lines
4.0 KiB
Go

package singleprocess
import (
"context"
"strconv"
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/hashicorp/vagrant/internal/server"
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
serverptypes "github.com/hashicorp/vagrant/internal/server/ptypes"
)
func TestServiceGetLogStream(t *testing.T) {
ctx := context.Background()
// Create our server
impl, err := New(WithDB(testDB(t)))
require.NoError(t, err)
client := server.TestServer(t, impl)
// Register our instances
resp, err := client.UpsertDeployment(ctx, &vagrant_server.UpsertDeploymentRequest{
Deployment: serverptypes.TestValidDeployment(t, &vagrant_server.Deployment{
Component: &vagrant_server.Component{
Name: "testapp",
},
}),
})
require.NoError(t, err)
dep := resp.Deployment
configClient, err := client.EntrypointConfig(ctx, &vagrant_server.EntrypointConfigRequest{
DeploymentId: dep.Id,
InstanceId: "1",
})
require.NoError(t, err)
_, err = configClient.Recv()
require.NoError(t, err)
// Simplify writing tests
type Req = vagrant_server.UpsertDeploymentRequest
require := require.New(t)
// Create the stream and send some log messages
logSendClient, err := client.EntrypointLogStream(ctx)
require.NoError(err)
for i := 0; i < 5; i++ {
var entries []*vagrant_server.LogBatch_Entry
for j := 0; j < 5; j++ {
entries = append(entries, &vagrant_server.LogBatch_Entry{
Line: strconv.Itoa(5*i + j),
})
}
logSendClient.Send(&vagrant_server.EntrypointLogBatch{
InstanceId: "1",
Lines: entries,
})
}
time.Sleep(100 * time.Millisecond)
// Connect to the stream and download the logs
logRecvClient, err := client.GetLogStream(ctx, &vagrant_server.GetLogStreamRequest{
Scope: &vagrant_server.GetLogStreamRequest_DeploymentId{
DeploymentId: dep.Id,
},
})
require.NoError(err)
// Get a batch
batch, err := logRecvClient.Recv()
require.NoError(err)
require.NotEmpty(batch.Lines)
require.Len(batch.Lines, 25)
}
func TestServiceGetLogStream_byApp(t *testing.T) {
ctx := context.Background()
// Create our server
impl, err := New(WithDB(testDB(t)))
require.NoError(t, err)
client := server.TestServer(t, impl)
// Setup our references
refApp := &vagrant_server.Ref_Application{
Project: "test",
Application: "app",
}
refWs := &vagrant_server.Ref_Workspace{
Workspace: "ws",
}
// Register our instances
resp, err := client.UpsertDeployment(ctx, &vagrant_server.UpsertDeploymentRequest{
Deployment: serverptypes.TestValidDeployment(t, &vagrant_server.Deployment{
Application: refApp,
Workspace: refWs,
Component: &vagrant_server.Component{
Name: "testapp",
},
}),
})
require.NoError(t, err)
dep := resp.Deployment
configClient, err := client.EntrypointConfig(ctx, &vagrant_server.EntrypointConfigRequest{
DeploymentId: dep.Id,
InstanceId: "1",
})
require.NoError(t, err)
_, err = configClient.Recv()
require.NoError(t, err)
// Simplify writing tests
type Req = vagrant_server.UpsertDeploymentRequest
require := require.New(t)
// Create the stream and send some log messages
logSendClient, err := client.EntrypointLogStream(ctx)
require.NoError(err)
for i := 0; i < 5; i++ {
var entries []*vagrant_server.LogBatch_Entry
for j := 0; j < 5; j++ {
entries = append(entries, &vagrant_server.LogBatch_Entry{
Line: strconv.Itoa(5*i + j),
})
}
logSendClient.Send(&vagrant_server.EntrypointLogBatch{
InstanceId: "1",
Lines: entries,
})
}
time.Sleep(100 * time.Millisecond)
// Connect to the stream and download the logs
logRecvClient, err := client.GetLogStream(ctx, &vagrant_server.GetLogStreamRequest{
Scope: &vagrant_server.GetLogStreamRequest_Application_{
Application: &vagrant_server.GetLogStreamRequest_Application{
Application: refApp,
Workspace: refWs,
},
},
})
require.NoError(err)
// Get a batch
batch, err := logRecvClient.Recv()
require.NoError(err)
require.NotEmpty(batch.Lines)
require.Len(batch.Lines, 25)
}