github.com/hashicorp/packer@v1.14.3/packer/plugin-getter/github/getter_test.go (about) 1 package github 2 3 import ( 4 "testing" 5 6 plugingetter "github.com/hashicorp/packer/packer/plugin-getter" 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestInit(t *testing.T) { 11 12 tests := []struct { 13 name string 14 entry *plugingetter.ChecksumFileEntry 15 binVersion string 16 protocolVersion string 17 os string 18 arch string 19 wantErr bool 20 }{ 21 { 22 name: "valid format parses", 23 entry: &plugingetter.ChecksumFileEntry{ 24 Filename: "packer-plugin-v0.2.12_x5.0_freebsd_amd64.zip", 25 }, 26 binVersion: "v0.2.12", 27 protocolVersion: "x5.0", 28 os: "freebsd", 29 arch: "amd64", 30 wantErr: false, 31 }, 32 { 33 name: "malformed filename returns error", 34 entry: &plugingetter.ChecksumFileEntry{ 35 Filename: "packer-plugin-v0.2.12_x5.0.zip", 36 }, 37 binVersion: "v0.2.12", 38 protocolVersion: "x5.0", 39 wantErr: true, 40 }, 41 } 42 43 for _, tt := range tests { 44 t.Run(tt.name, func(t *testing.T) { 45 req := &plugingetter.Requirement{} 46 47 getter := &Getter{} 48 err := getter.Init(req, tt.entry) 49 50 if err != nil && !tt.wantErr { 51 t.Fatalf("unexpected error: %s", err) 52 } 53 54 if err == nil && tt.wantErr { 55 t.Fatal("expected error but got nil") 56 } 57 58 if !tt.wantErr && (tt.entry.BinVersion != "v0.2.12" || tt.entry.ProtVersion != "x5.0" || tt.entry.Os != "freebsd" || tt.entry.Arch != "amd64") { 59 t.Fatalf("unexpected parsed values: %+v", tt.entry) 60 } 61 }) 62 } 63 } 64 65 func TestValidate(t *testing.T) { 66 tests := []struct { 67 name string 68 option plugingetter.GetOptions 69 installOpts plugingetter.BinaryInstallationOptions 70 entry *plugingetter.ChecksumFileEntry 71 version string 72 wantErr bool 73 }{ 74 { 75 name: "valid entry", 76 installOpts: plugingetter.BinaryInstallationOptions{ 77 OS: "linux", 78 ARCH: "amd64", 79 }, 80 entry: &plugingetter.ChecksumFileEntry{ 81 BinVersion: "v1.2.3", 82 Os: "linux", 83 Arch: "amd64", 84 ProtVersion: "x5.0", 85 }, 86 version: "1.2.3", 87 wantErr: false, 88 }, 89 { 90 name: "invalid bin version", 91 installOpts: plugingetter.BinaryInstallationOptions{ 92 OS: "linux", 93 ARCH: "amd64", 94 }, 95 entry: &plugingetter.ChecksumFileEntry{ 96 BinVersion: "v1.2.3", 97 Os: "linux", 98 Arch: "amd64", 99 ProtVersion: "x5.0", 100 }, 101 version: "1.2.4", 102 wantErr: true, 103 }, 104 { 105 name: "wrong OS", 106 installOpts: plugingetter.BinaryInstallationOptions{ 107 OS: "linux", 108 ARCH: "amd64", 109 }, 110 entry: &plugingetter.ChecksumFileEntry{ 111 BinVersion: "v1.2.3", 112 Os: "darwin", 113 Arch: "amd64", 114 ProtVersion: "x5.0", 115 }, 116 version: "1.2.3", 117 wantErr: true, 118 }, 119 { 120 name: "wrong Arch", 121 installOpts: plugingetter.BinaryInstallationOptions{ 122 OS: "linux", 123 ARCH: "amd64", 124 }, 125 entry: &plugingetter.ChecksumFileEntry{ 126 BinVersion: "v1.2.3", 127 Os: "linux", 128 Arch: "arm64", 129 ProtVersion: "x5.0", 130 }, 131 version: "1.2.3", 132 wantErr: true, 133 }, 134 { 135 name: "invalid API major version", 136 installOpts: plugingetter.BinaryInstallationOptions{ 137 OS: "linux", 138 ARCH: "amd64", 139 APIVersionMajor: "5", 140 APIVersionMinor: "0", 141 }, 142 entry: &plugingetter.ChecksumFileEntry{ 143 BinVersion: "v1.2.3", 144 Os: "linux", 145 Arch: "amd64", 146 ProtVersion: "x4.0", 147 }, 148 version: "1.2.3", 149 wantErr: true, 150 }, 151 { 152 name: "invalid API minor version", 153 installOpts: plugingetter.BinaryInstallationOptions{ 154 OS: "linux", 155 ARCH: "amd64", 156 APIVersionMajor: "5", 157 APIVersionMinor: "0", 158 }, 159 entry: &plugingetter.ChecksumFileEntry{ 160 BinVersion: "v1.2.3", 161 Os: "linux", 162 Arch: "amd64", 163 ProtVersion: "x5.4", 164 }, 165 version: "1.2.3", 166 wantErr: true, 167 }, 168 } 169 170 for _, tt := range tests { 171 t.Run(tt.name, func(t *testing.T) { 172 173 getter := &Getter{} 174 err := getter.Validate(plugingetter.GetOptions{}, tt.version, tt.installOpts, tt.entry) 175 176 if err != nil && !tt.wantErr { 177 t.Fatalf("unexpected error: %s", err) 178 } 179 180 if err == nil && tt.wantErr { 181 t.Fatal("expected error but got nil") 182 } 183 }) 184 } 185 } 186 187 func TestExpectedFileName(t *testing.T) { 188 getter := &Getter{} 189 pr := plugingetter.Requirement{} 190 fileName := getter.ExpectedFileName(&pr, "1.2.3", &plugingetter.ChecksumFileEntry{}, "packer-plugin-docker_v1.2.3_x5.0_linux_amd64.zip") 191 assert.Equal(t, "packer-plugin-docker_v1.2.3_x5.0_linux_amd64.zip", fileName) 192 }