func (s *BootstrapSuite) TestWaitSSHNoticesProvisioningFailures(c *gc.C) { ctx := coretesting.Context(c) _, err := common.WaitSSH(ctx.Stderr, nil, ssh.DefaultClient, "/bin/true", failsProvisioning{}, testSSHTimeout) c.Check(err, gc.ErrorMatches, `instance provisioning failed`) _, err = common.WaitSSH(ctx.Stderr, nil, ssh.DefaultClient, "/bin/true", failsProvisioning{message: "blargh"}, testSSHTimeout) c.Check(err, gc.ErrorMatches, `instance provisioning failed \(blargh\)`) }
func (s *BootstrapSuite) TestWaitSSHKilledWaitingForAddresses(c *gc.C) { ctx := coretesting.Context(c) interrupted := make(chan os.Signal, 1) interrupted <- os.Interrupt _, err := common.WaitSSH(ctx, interrupted, ssh.DefaultClient, "/bin/true", neverAddresses{}, testSSHTimeout) c.Check(err, gc.ErrorMatches, "interrupted") c.Check(coretesting.Stderr(ctx), gc.Matches, "Waiting for address\n") }
func (s *BootstrapSuite) TestWaitSSHTimesOutWaitingForDial(c *gc.C) { ctx := coretesting.Context(c) // 0.x.y.z addresses are always invalid _, err := common.WaitSSH(ctx, nil, ssh.DefaultClient, "/bin/true", &neverOpensPort{addr: "0.1.2.3"}, testSSHTimeout) c.Check(err, gc.ErrorMatches, `waited for `+testSSHTimeout.Timeout.String()+` without being able to connect: mock connection failure to 0.1.2.3`) c.Check(coretesting.Stderr(ctx), gc.Matches, "Waiting for address\n"+ "(Attempting to connect to 0.1.2.3:22\n)+") }
func (s *BootstrapSuite) TestWaitSSHKilledWaitingForDial(c *gc.C) { ctx := coretesting.Context(c) timeout := testSSHTimeout timeout.Timeout = 1 * time.Minute interrupted := make(chan os.Signal, 1) _, err := common.WaitSSH(ctx, interrupted, ssh.DefaultClient, "", &interruptOnDial{name: "0.1.2.3", interrupted: interrupted}, timeout) c.Check(err, gc.ErrorMatches, "interrupted") // Exact timing is imprecise but it should have tried a few times before being killed c.Check(coretesting.Stderr(ctx), gc.Matches, "Waiting for address\n"+ "(Attempting to connect to 0.1.2.3:22\n)+") }
func (s *BootstrapSuite) TestWaitSSHRefreshAddresses(c *gc.C) { ctx := coretesting.Context(c) _, err := common.WaitSSH(ctx, nil, ssh.DefaultClient, "", &addressesChange{addrs: [][]string{ nil, nil, []string{"0.1.2.3"}, []string{"0.1.2.3"}, nil, []string{"0.1.2.4"}, }}, testSSHTimeout) // Not necessarily the last one in the list, due to scheduling. c.Check(err, gc.ErrorMatches, `waited for `+testSSHTimeout.Timeout.String()+` without being able to connect: mock connection failure to 0.1.2.[34]`) stderr := coretesting.Stderr(ctx) c.Check(stderr, gc.Matches, "Waiting for address\n"+ "(.|\n)*(Attempting to connect to 0.1.2.3:22\n)+(.|\n)*") c.Check(stderr, gc.Matches, "Waiting for address\n"+ "(.|\n)*(Attempting to connect to 0.1.2.4:22\n)+(.|\n)*") }
func (s *BootstrapSuite) TestWaitSSHStopsOnBadError(c *gc.C) { ctx := coretesting.Context(c) _, err := common.WaitSSH(ctx, nil, ssh.DefaultClient, "/bin/true", brokenAddresses{}, testSSHTimeout) c.Check(err, gc.ErrorMatches, "getting addresses: Addresses will never work") c.Check(coretesting.Stderr(ctx), gc.Equals, "Waiting for address\n") }
func (s *BootstrapSuite) TestWaitSSHTimesOutWaitingForAddresses(c *gc.C) { ctx := coretesting.Context(c) _, err := common.WaitSSH(ctx, nil, ssh.DefaultClient, "/bin/true", neverAddresses{}, testSSHTimeout) c.Check(err, gc.ErrorMatches, `waited for `+testSSHTimeout.Timeout.String()+` without getting any addresses`) c.Check(coretesting.Stderr(ctx), gc.Matches, "Waiting for address\n") }