| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package bootstrap | 5 package bootstrap |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "errors" | 8 "errors" |
| 9 "testing" | 9 "testing" |
| 10 | 10 |
| 11 "github.com/luci/luci-go/client/environ" | 11 "github.com/luci/luci-go/client/environ" |
| 12 "github.com/luci/luci-go/client/logdog/butlerlib/streamclient" | 12 "github.com/luci/luci-go/client/logdog/butlerlib/streamclient" |
| 13 "github.com/luci/luci-go/client/logdog/butlerlib/streamproto" | 13 "github.com/luci/luci-go/client/logdog/butlerlib/streamproto" |
| 14 » "github.com/luci/luci-go/common/logdog/types" | 14 |
| 15 » "github.com/luci/luci-go/common/testing/assertions" | 15 » . "github.com/luci/luci-go/common/testing/assertions" |
| 16 . "github.com/smartystreets/goconvey/convey" | 16 . "github.com/smartystreets/goconvey/convey" |
| 17 ) | 17 ) |
| 18 | 18 |
| 19 type sentinelClient struct{} | 19 type sentinelClient struct{} |
| 20 | 20 |
| 21 func (*sentinelClient) NewStream(f streamproto.Flags) (streamclient.Stream, erro
r) { return nil, nil } | 21 func (*sentinelClient) NewStream(f streamproto.Flags) (streamclient.Stream, erro
r) { return nil, nil } |
| 22 | 22 |
| 23 func TestBootstrap(t *testing.T) { | 23 func TestBootstrap(t *testing.T) { |
| 24 Convey(`A test Environment`, t, func() { | 24 Convey(`A test Environment`, t, func() { |
| 25 reg := &streamclient.Registry{} | 25 reg := &streamclient.Registry{} |
| 26 regSpec := "" | 26 regSpec := "" |
| 27 regErr := error(nil) | 27 regErr := error(nil) |
| 28 reg.Register("test", func(spec string) (streamclient.Client, err
or) { | 28 reg.Register("test", func(spec string) (streamclient.Client, err
or) { |
| 29 regSpec = spec | 29 regSpec = spec |
| 30 return &sentinelClient{}, regErr | 30 return &sentinelClient{}, regErr |
| 31 }) | 31 }) |
| 32 | 32 |
| 33 env := environ.Environment{ | 33 env := environ.Environment{ |
| 34 "IRRELEVANT": "VALUE", | 34 "IRRELEVANT": "VALUE", |
| 35 } | 35 } |
| 36 | 36 |
| 37 Convey(`With no Butler values will return ErrNotBootstrapped.`,
func() { | 37 Convey(`With no Butler values will return ErrNotBootstrapped.`,
func() { |
| 38 _, err := getFromEnv(env, reg) | 38 _, err := getFromEnv(env, reg) |
| 39 So(err, ShouldEqual, ErrNotBootstrapped) | 39 So(err, ShouldEqual, ErrNotBootstrapped) |
| 40 }) | 40 }) |
| 41 | 41 |
| 42 » » Convey(`With a Butler prefix`, func() { | 42 » » Convey(`With a Butler project and prefix`, func() { |
| 43 » » » env[EnvStreamProject] = "test-project" |
| 43 env[EnvStreamPrefix] = "butler/prefix" | 44 env[EnvStreamPrefix] = "butler/prefix" |
| 44 | 45 |
| 45 » » » Convey(`Yields a Bootstrap with a Prefix and no Client.`
, func() { | 46 » » » Convey(`Yields a Bootstrap with a Project, Prefix, and n
o Client.`, func() { |
| 46 bs, err := getFromEnv(env, reg) | 47 bs, err := getFromEnv(env, reg) |
| 47 So(err, ShouldBeNil) | 48 So(err, ShouldBeNil) |
| 48 » » » » So(bs.Prefix, ShouldEqual, types.StreamName("but
ler/prefix")) | 49 |
| 49 » » » » So(bs.Client, ShouldBeNil) | 50 » » » » So(bs, ShouldResemble, &Bootstrap{ |
| 51 » » » » » Project: "test-project", |
| 52 » » » » » Prefix: "butler/prefix", |
| 53 » » » » }) |
| 50 }) | 54 }) |
| 51 | 55 |
| 52 Convey(`And a stream server path`, func() { | 56 Convey(`And a stream server path`, func() { |
| 53 env[EnvStreamServerPath] = "test:client:params" | 57 env[EnvStreamServerPath] = "test:client:params" |
| 54 | 58 |
| 55 Convey(`Yields a Bootstrap with a Prefix and Cli
ent.`, func() { | 59 Convey(`Yields a Bootstrap with a Prefix and Cli
ent.`, func() { |
| 56 bs, err := getFromEnv(env, reg) | 60 bs, err := getFromEnv(env, reg) |
| 57 So(err, ShouldBeNil) | 61 So(err, ShouldBeNil) |
| 58 » » » » » So(bs.Prefix, ShouldEqual, types.StreamN
ame("butler/prefix")) | 62 |
| 59 » » » » » So(bs.Client, ShouldEqual, &sentinelClie
nt{}) | 63 » » » » » So(bs, ShouldResemble, &Bootstrap{ |
| 64 » » » » » » Project: "test-project", |
| 65 » » » » » » Prefix: "butler/prefix", |
| 66 » » » » » » Client: &sentinelClient{}, |
| 67 » » » » » }) |
| 60 So(regSpec, ShouldEqual, "client:params"
) | 68 So(regSpec, ShouldEqual, "client:params"
) |
| 61 }) | 69 }) |
| 62 | 70 |
| 63 Convey(`If Client creation fails, will fail.`, f
unc() { | 71 Convey(`If Client creation fails, will fail.`, f
unc() { |
| 64 regErr = errors.New("testing error") | 72 regErr = errors.New("testing error") |
| 65 _, err := getFromEnv(env, reg) | 73 _, err := getFromEnv(env, reg) |
| 66 » » » » » So(err, assertions.ShouldErrLike, "faile
d to create stream client") | 74 » » » » » So(err, ShouldErrLike, "failed to create
stream client") |
| 67 }) | 75 }) |
| 68 }) | 76 }) |
| 77 |
| 78 Convey(`With an invalid Butler prefix, will fail.`, func
() { |
| 79 env[EnvStreamPrefix] = "_notavaildprefix" |
| 80 _, err := getFromEnv(env, reg) |
| 81 So(err, ShouldErrLike, "failed to validate prefi
x") |
| 82 }) |
| 83 |
| 84 Convey(`With an missing Butler project, will fail.`, fun
c() { |
| 85 delete(env, EnvStreamProject) |
| 86 _, err := getFromEnv(env, reg) |
| 87 So(err, ShouldErrLike, "failed to validate proje
ct") |
| 88 }) |
| 89 |
| 90 Convey(`With an invalid Butler project, will fail.`, fun
c() { |
| 91 env[EnvStreamProject] = "_notavaildproject" |
| 92 _, err := getFromEnv(env, reg) |
| 93 So(err, ShouldErrLike, "failed to validate proje
ct") |
| 94 }) |
| 69 }) | 95 }) |
| 70 | |
| 71 Convey(`With an invalid Butler prefix, will fail.`, func() { | |
| 72 env[EnvStreamPrefix] = "_notavaildprefix" | |
| 73 _, err := getFromEnv(env, reg) | |
| 74 So(err, assertions.ShouldErrLike, "failed to validate pr
efix") | |
| 75 }) | |
| 76 | |
| 77 }) | 96 }) |
| 78 } | 97 } |
| OLD | NEW |