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  }