11package main_test
22
33import (
4+ "bytes"
45 "encoding/json"
56 "errors"
67 "fmt"
8+ "io"
79 "os"
810 "strings"
911 "testing"
@@ -17,6 +19,8 @@ import (
1719 "github.com/osbuild/blueprint/pkg/blueprint"
1820 "github.com/osbuild/images/pkg/arch"
1921 "github.com/osbuild/images/pkg/bib/osinfo"
22+ "github.com/osbuild/images/pkg/cloud"
23+ "github.com/osbuild/images/pkg/cloud/awscloud"
2024 "github.com/osbuild/images/pkg/container"
2125 "github.com/osbuild/images/pkg/dnfjson"
2226 "github.com/osbuild/images/pkg/manifest"
@@ -631,3 +635,69 @@ func TestCobraCmdlineVerbose(t *testing.T) {
631635 })
632636 }
633637}
638+
639+ type fakeAwsUploader struct {
640+ checkCalls int
641+
642+ region , bucket , ami string
643+ opts * awscloud.UploaderOptions
644+
645+ uploadAndRegisterRead bytes.Buffer
646+ uploadAndRegisterCalls int
647+ uploadAndRegisterErr error
648+ }
649+
650+ var _ = cloud .Uploader (& fakeAwsUploader {})
651+
652+ func (fa * fakeAwsUploader ) Check (status io.Writer ) error {
653+ fa .checkCalls ++
654+ return nil
655+ }
656+
657+ func (fa * fakeAwsUploader ) UploadAndRegister (r io.Reader , status io.Writer ) error {
658+ fa .uploadAndRegisterCalls ++
659+ _ , err := io .Copy (& fa .uploadAndRegisterRead , r )
660+ if err != nil {
661+ panic (err )
662+ }
663+ return fa .uploadAndRegisterErr
664+ }
665+
666+ func TestHandleAWSFlags (t * testing.T ) {
667+
668+ for _ , tc := range []struct {
669+ extraArgs []string
670+ expectedOpts * awscloud.UploaderOptions
671+ }{
672+ {nil , & awscloud.UploaderOptions {TargetArch : arch .Current ()}},
673+ {[]string {"--target-arch=aarch64" }, & awscloud.UploaderOptions {TargetArch : arch .ARCH_AARCH64 }},
674+ } {
675+ var fau fakeAwsUploader
676+ t .Cleanup (main .MockAwscloudNewUploader (func (region string , bucket string , ami string , opts * awscloud.UploaderOptions ) (cloud.Uploader , error ) {
677+ fau .region = region
678+ fau .bucket = bucket
679+ fau .ami = ami
680+ fau .opts = opts
681+ return & fau , nil
682+ }))
683+
684+ rootCmd , err := main .BuildCobraCmdline ()
685+ assert .NoError (t , err )
686+ // Commands() returns commandsordered by name
687+ buildCmd := rootCmd .Commands ()[0 ]
688+ assert .Equal (t , "build" , buildCmd .Name ())
689+ err = buildCmd .ParseFlags (append ([]string {
690+ "--aws-bucket=aws-bucket" ,
691+ "--aws-ami-name=aws-ami-name" ,
692+ "--aws-region=aws-region" ,
693+ "--type=ami" ,
694+ }, tc .extraArgs ... ))
695+ assert .NoError (t , err )
696+
697+ uploader , err := main .HandleAWSFlags (buildCmd )
698+ assert .NoError (t , err )
699+ assert .NotNil (t , uploader )
700+ assert .Equal (t , 1 , fau .checkCalls )
701+ assert .Equal (t , tc .expectedOpts , fau .opts )
702+ }
703+ }
0 commit comments