https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/imagemetadata.go File cmd/plugins/juju-metadata/imagemetadata.go (right):
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/imagemetadata.go#newcode64 cmd/plugins/juju-metadata/imagemetadata.go:64: if store, err := configstore.Default(); err == nil { What should we be doing if there is no configstore? Is it an error?
It seems that either we allow to use to say "don't use an environment" or we should fail if we can't open the environment defined by the command.
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/imagemetadata.go#newcode131 cmd/plugins/juju-metadata/imagemetadata.go:131: %q why are the directories quoted?
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/imagemetadata_test.go File cmd/plugins/juju-metadata/imagemetadata_test.go (right):
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/imagemetadata_test.go#newcode39 cmd/plugins/juju-metadata/imagemetadata_test.go:39: os.Clearenv() Why clear the entire environment?
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/imagemetadata_test.go#newcode42 cmd/plugins/juju-metadata/imagemetadata_test.go:42: restore := testbase.PatchEnvironment("AWS_ACCESS_KEY_ID", "access") just use:
s.PatchEnvironment("AWS_ACCESS_KEY_ID", "access")
This adds the restore cleanup for you.
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/imagemetadata_test.go#newcode49 cmd/plugins/juju-metadata/imagemetadata_test.go:49: for _, envstring := range s.environ { I'd be tempted to make this a function by itself, and call "addCleanup" just after the os.Clearenv().
Adding the home.Restore() as a cleanup also means you don't need a TestTearDown.
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/imagemetadata_test.go#newcode88 cmd/plugins/juju-metadata/imagemetadata_test.go:88: c.Assert(strings.Contains(content, fmt.Sprintf(`"region": %q`, expected.region)), jc.IsTrue) Do you realise that we have a checker for Contains?
c.Assert(content, jc.Contains, fmt.Sprintf(`"region": %q`, expected.region))
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/imagemetadata_test.go#newcode129 cmd/plugins/juju-metadata/imagemetadata_test.go:129: errOut := ctx.Stdout.(*bytes.Buffer).String() there is also testing.Stdout(ctx) which does the horrible cast for you.
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/validateimagemetadata_test.go File cmd/plugins/juju-metadata/validateimagemetadata_test.go (right):
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/validateimagemetadata_test.go#newcode101 cmd/plugins/juju-metadata/validateimagemetadata_test.go:101: s.AddCleanup(func(*gc.C) { restore() }) s.PatchEnvironment("AWS_ACCESS_KEY_ID", "access")
https://codereview.appspot.com/14663043/diff/4001/cmd/plugins/juju-metadata/validateimagemetadata_test.go#newcode133 cmd/plugins/juju-metadata/validateimagemetadata_test.go:133: testbase.PatchEnvironment("AWS_ACCESS_KEY_ID", "") s.PatchEnvironment
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate.go File environs/imagemetadata/generate.go (right):
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate.go#newcode27 environs/imagemetadata/generate.go:27: return err Do you think it is worthwhile adding any logging to the failure conditions?
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate.go#newcode57 environs/imagemetadata/generate.go:57: newRecord := im Just to be clear, this isn't making a new record, but modifying the pointer of the value passed in. Is that what you want?
To make sure it is a copy you could do:
newRecord := *im newRecord.blah = blah toWrite[i] = &newRecord
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate_test.go File environs/imagemetadata/generate_test.go (right):
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate_test.go#newcode20 environs/imagemetadata/generate_test.go:20: type generateSuite struct{} all test suits should contain from testbase.LoggingSuite to capture logging (and give cleanup methods)
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate_test.go#newcode32 environs/imagemetadata/generate_test.go:32: c.Assert(len(metadata), gc.Equals, 1) c.Assert(metadata, gc.HasLen, 1)
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate_test.go#newcode54 environs/imagemetadata/generate_test.go:54: c.Assert(len(metadata), gc.Equals, 1) gc.HasLen
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate_test.go#newcode93 environs/imagemetadata/generate_test.go:93: c.Assert(len(metadata), gc.Equals, 2) gc.HasLen
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate_test.go#newcode135 environs/imagemetadata/generate_test.go:135: c.Assert(len(metadata), gc.Equals, 3) and again
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/generate_test.go#newcode184 environs/imagemetadata/generate_test.go:184: c.Assert(len(metadata), gc.Equals, 3) last one?
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/marshal_test.go File environs/imagemetadata/marshal_test.go (right):
https://codereview.appspot.com/14663043/diff/4001/environs/imagemetadata/marshal_test.go#newcode17 environs/imagemetadata/marshal_test.go:17: type marshalSuite struct{} testbase.LoggingSuite
https://codereview.appspot.com/14663043/
« Back to merge proposal
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ imagemetadata. go juju-metadata/ imagemetadata. go (right):
File cmd/plugins/
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ imagemetadata. go#newcode64 juju-metadata/ imagemetadata. go:64: if store, err := Default( ); err == nil {
cmd/plugins/
configstore.
What should we be doing if there is no configstore? Is it an error?
It seems that either we allow to use to say "don't use an environment"
or we should fail if we can't open the environment defined by the
command.
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ imagemetadata. go#newcode131 juju-metadata/ imagemetadata. go:131: %q
cmd/plugins/
why are the directories quoted?
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ imagemetadata_ test.go juju-metadata/ imagemetadata_ test.go (right):
File cmd/plugins/
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ imagemetadata_ test.go# newcode39 juju-metadata/ imagemetadata_ test.go: 39: os.Clearenv()
cmd/plugins/
Why clear the entire environment?
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ imagemetadata_ test.go# newcode42 juju-metadata/ imagemetadata_ test.go: 42: restore := PatchEnvironmen t("AWS_ ACCESS_ KEY_ID" , "access")
cmd/plugins/
testbase.
just use:
s.PatchEnvironm ent("AWS_ ACCESS_ KEY_ID" , "access")
This adds the restore cleanup for you.
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ imagemetadata_ test.go# newcode49 juju-metadata/ imagemetadata_ test.go: 49: for _, envstring :=
cmd/plugins/
range s.environ {
I'd be tempted to make this a function by itself, and call "addCleanup"
just after the os.Clearenv().
Adding the home.Restore() as a cleanup also means you don't need a
TestTearDown.
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ imagemetadata_ test.go# newcode88 juju-metadata/ imagemetadata_ test.go: 88: strings. Contains( content, fmt.Sprintf( `"region" : %q`,
cmd/plugins/
c.Assert(
expected.region)), jc.IsTrue)
Do you realise that we have a checker for Contains?
c.Assert(content, jc.Contains, fmt.Sprintf( `"region" : %q`,
expected.region))
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ imagemetadata_ test.go# newcode129 juju-metadata/ imagemetadata_ test.go: 129: errOut := (*bytes. Buffer) .String( )
cmd/plugins/
ctx.Stdout.
there is also testing.Stdout(ctx) which does the horrible cast for you.
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ validateimageme tadata_ test.go juju-metadata/ validateimageme tadata_ test.go (right):
File cmd/plugins/
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ validateimageme tadata_ test.go# newcode101 juju-metadata/ validateimageme tadata_ test.go: 101: func(*gc. C) { restore() }) ent("AWS_ ACCESS_ KEY_ID" , "access")
cmd/plugins/
s.AddCleanup(
s.PatchEnvironm
https:/ /codereview. appspot. com/14663043/ diff/4001/ cmd/plugins/ juju-metadata/ validateimageme tadata_ test.go# newcode133 juju-metadata/ validateimageme tadata_ test.go: 133: PatchEnvironmen t("AWS_ ACCESS_ KEY_ID" , "")
cmd/plugins/
testbase.
s.PatchEnvironment
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate. go imagemetadata/ generate. go (right):
File environs/
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate. go#newcode27 imagemetadata/ generate. go:27: return err
environs/
Do you think it is worthwhile adding any logging to the failure
conditions?
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate. go#newcode57 imagemetadata/ generate. go:57: newRecord := im
environs/
Just to be clear, this isn't making a new record, but modifying the
pointer of the value passed in. Is that what you want?
To make sure it is a copy you could do:
newRecord := *im
newRecord.blah = blah
toWrite[i] = &newRecord
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate_ test.go imagemetadata/ generate_ test.go (right):
File environs/
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate_ test.go# newcode20 imagemetadata/ generate_ test.go: 20: type generateSuite struct{} LoggingSuite to capture
environs/
all test suits should contain from testbase.
logging (and give cleanup methods)
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate_ test.go# newcode32 imagemetadata/ generate_ test.go: 32: c.Assert( len(metadata) ,
environs/
gc.Equals, 1)
c.Assert(metadata, gc.HasLen, 1)
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate_ test.go# newcode54 imagemetadata/ generate_ test.go: 54: c.Assert( len(metadata) ,
environs/
gc.Equals, 1)
gc.HasLen
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate_ test.go# newcode93 imagemetadata/ generate_ test.go: 93: c.Assert( len(metadata) ,
environs/
gc.Equals, 2)
gc.HasLen
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate_ test.go# newcode135 imagemetadata/ generate_ test.go: 135: c.Assert( len(metadata) ,
environs/
gc.Equals, 3)
and again
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ generate_ test.go# newcode184 imagemetadata/ generate_ test.go: 184: c.Assert( len(metadata) ,
environs/
gc.Equals, 3)
last one?
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ marshal_ test.go imagemetadata/ marshal_ test.go (right):
File environs/
https:/ /codereview. appspot. com/14663043/ diff/4001/ environs/ imagemetadata/ marshal_ test.go# newcode17 imagemetadata/ marshal_ test.go: 17: type marshalSuite struct{} LoggingSuite
environs/
testbase.
https:/ /codereview. appspot. com/14663043/