Skip to content

Commit 533ae80

Browse files
committed
basic entrypoint test
1 parent f1b6605 commit 533ae80

File tree

2 files changed

+51
-69
lines changed

2 files changed

+51
-69
lines changed

robot/impl/local_robot_test.go

Lines changed: 0 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -4013,72 +4013,3 @@ func TestRemovingOfflineRemotes(t *testing.T) {
40134013
cancelReconfig()
40144014
wg.Wait()
40154015
}
4016-
4017-
// Tests that machine state properly reports initializing and running.
4018-
4019-
4020-
//ctx := context.Background()
4021-
4022-
// completeComponentConstruction := make(chan struct{}, 1)
4023-
4024-
//// Register a `foo` component whose construction completion can be delayed,
4025-
//// and defer its deregistration.
4026-
// resource.RegisterComponent(generic.API, fooModel, resource.Registration[resource.Resource,
4027-
// resource.NoNativeConfig]{
4028-
//Constructor: func(
4029-
//ctx context.Context,
4030-
//deps resource.Dependencies,
4031-
//conf resource.Config,
4032-
//logger logging.Logger,
4033-
//) (resource.Resource, error) {
4034-
//// Delay completion of constructor until `completeComponentConstruction` is closed.
4035-
//<-completeComponentConstruction
4036-
4037-
// return &fooComponent{
4038-
//Named: conf.ResourceName().AsNamed(),
4039-
//logger: logger,
4040-
// }, nil
4041-
//},
4042-
//})
4043-
//defer func() {
4044-
//resource.Deregister(generic.API, fooModel)
4045-
//}()
4046-
4047-
// cfg := &config.Config{
4048-
//Components: []resource.Config{
4049-
//{
4050-
//Name: "foo",
4051-
//API: generic.API,
4052-
//Model: fooModel,
4053-
// },
4054-
//},
4055-
//}
4056-
//r := setupLocalRobot(t, ctx, cfg, logger)
4057-
4058-
//// Assert that robot reports a state of "initializing" until `foo` completes construction.
4059-
// machineStatus, err := r.MachineStatus(ctx)
4060-
// test.That(t, err, test.ShouldBeNil)
4061-
//test.That(t, machineStatus, test.ShouldNotBeNil)
4062-
//test.That(t, machineStatus.State, test.ShouldEqual, robot.StateInitializing)
4063-
4064-
// close(completeComponentConstruction)
4065-
4066-
//// Assert that robot reports a state of "running" after `foo` completes
4067-
//// construction.
4068-
// machineStatus, err = r.MachineStatus(ctx)
4069-
// test.That(t, err, test.ShouldBeNil)
4070-
//test.That(t, machineStatus, test.ShouldNotBeNil)
4071-
//test.That(t, machineStatus.State, test.ShouldEqual, robot.StateRunning)
4072-
4073-
//// Reconfigure robot to replace `foo` with idential `bar` component (should build
4074-
//// immediately, as `completeComponentConstruction` has already been closed.)
4075-
// cfg.Components[0].Name = "bar"
4076-
// r.Reconfigure(ctx, cfg)
4077-
4078-
//// Assert that robot continues to report a state of "running" even after further
4079-
//// reconfiguration.
4080-
// machineStatus, err = r.MachineStatus(ctx)
4081-
// test.That(t, err, test.ShouldBeNil)
4082-
//test.That(t, machineStatus, test.ShouldNotBeNil)
4083-
//test.That(t, machineStatus.State, test.ShouldEqual, robot.StateRunning)
4084-
//}

web/server/entrypoint_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"go.viam.com/rdk/config"
2828
"go.viam.com/rdk/logging"
2929
"go.viam.com/rdk/resource"
30+
"go.viam.com/rdk/robot"
3031
_ "go.viam.com/rdk/services/register"
3132
"go.viam.com/rdk/testutils"
3233
"go.viam.com/rdk/testutils/robottestutils"
@@ -192,3 +193,53 @@ func isExpectedShutdownError(err error, testLogger logging.Logger) bool {
192193
testLogger.Errorw("Unexpected shutdown error", "err", err)
193194
return false
194195
}
196+
197+
// Tests that machine state properly reports initializing or running.
198+
func TestMachineState(t *testing.T) {
199+
if runtime.GOARCH == "arm" {
200+
t.Skip("skipping on 32-bit ARM, subprocess build warnings cause failure")
201+
}
202+
203+
logger, logObserver := logging.NewObservedTestLogger(t)
204+
205+
cfgFilename := utils.ResolveFile("/etc/configs/fake.json")
206+
cfg, err := config.Read(context.Background(), cfgFilename, logger)
207+
test.That(t, err, test.ShouldBeNil)
208+
209+
var port int
210+
var success bool
211+
var server pexec.ManagedProcess
212+
for portTryNum := 0; portTryNum < 10; portTryNum++ {
213+
p, err := goutils.TryReserveRandomPort()
214+
port = p
215+
test.That(t, err, test.ShouldBeNil)
216+
217+
cfg.Network.BindAddress = fmt.Sprintf(":%d", port)
218+
cfgFilename, err = robottestutils.MakeTempConfig(t, cfg, logger)
219+
test.That(t, err, test.ShouldBeNil)
220+
221+
server = robottestutils.ServerAsSeparateProcess(t, cfgFilename, logger)
222+
err = server.Start(context.Background())
223+
test.That(t, err, test.ShouldBeNil)
224+
225+
if success = robottestutils.WaitForServing(logObserver, port); success {
226+
defer func() {
227+
test.That(t, server.Stop(), test.ShouldBeNil)
228+
}()
229+
break
230+
}
231+
logger.Infow("Port in use. Restarting on new port.", "port", port, "err", err)
232+
server.Stop()
233+
continue
234+
}
235+
test.That(t, success, test.ShouldBeTrue)
236+
237+
addr := "localhost:" + strconv.Itoa(port)
238+
rc := robottestutils.NewRobotClient(t, logger, addr, time.Second)
239+
240+
machineStatus, err := rc.MachineStatus(context.Background())
241+
test.That(t, err, test.ShouldBeNil)
242+
test.That(t, machineStatus, test.ShouldNotBeNil)
243+
test.That(t, machineStatus.State, test.ShouldBeIn,
244+
[]robot.MachineState{robot.StateInitializing, robot.StateRunning})
245+
}

0 commit comments

Comments
 (0)