161 lines
4.0 KiB
Go
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)
|
|
}
|