| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- package pack
- import (
- "context"
- "errors"
- "os"
- "path/filepath"
- "testing"
- "k8s.io/client-go/util/homedir"
- )
- type BuildpackNameTestResult struct {
- name string
- err error
- }
- func setupPackTest(tb testing.TB) func(tb testing.TB) {
- porterHome := filepath.Join(homedir.HomeDir(), ".porter")
- if err := os.MkdirAll(porterHome, 0o750); err != nil {
- tb.Errorf("unable to initialize porter home folder for tests: %s", err.Error())
- }
- return func(tb testing.TB) {
- dstFiles, err := os.ReadDir(porterHome)
- if err != nil {
- return
- }
- for _, info := range dstFiles {
- if !info.Type().IsDir() {
- continue
- }
- if err := os.RemoveAll(filepath.Join(porterHome, info.Name())); err != nil {
- tb.Errorf("unable to delete porter home subfolder for tests: %s", err.Error())
- }
- }
- }
- }
- func TestGetBuildpackName(t *testing.T) {
- tests := []struct {
- name string
- input string
- expected BuildpackNameTestResult
- }{
- {
- "empty buildpack name",
- "",
- BuildpackNameTestResult{"", errors.New("please specify a buildpack name")},
- },
- {
- "cnb short name",
- "heroku/nodejs",
- BuildpackNameTestResult{"heroku/nodejs", nil},
- },
- {
- "cnb urn",
- "urn:cnb:registry:heroku/nodejs",
- BuildpackNameTestResult{"urn:cnb:registry:heroku/nodejs", nil},
- },
- {
- "cnb shim",
- "https://cnb-shim.herokuapp.com/v1/heroku/nodejs?version=0.0.0&name=Node.js",
- BuildpackNameTestResult{"https://cnb-shim.herokuapp.com/v1/heroku/nodejs?version=0.0.0&name=Node.js", nil},
- },
- {
- "invalid tgz",
- "https://example.com/tar.tgz",
- BuildpackNameTestResult{"", errors.New("please provide either a github.com URL or a ZIP file URL")},
- },
- {
- "github repo",
- "https://github.com/heroku/buildpacks-nodejs/archive/fa2dc153e4683181608307ecb3922eaaeb43d92c.zip",
- BuildpackNameTestResult{filepath.Join(homedir.HomeDir(), ".porter", "buildpacks-nodejs-fa2dc153e4683181608307ecb3922eaaeb43d92c"), nil},
- },
- {
- "github repo zip",
- "https://github.com/heroku/buildpacks-nodejs/archive/refs/tags/v1.1.6.zip",
- BuildpackNameTestResult{filepath.Join(homedir.HomeDir(), ".porter", "buildpacks-nodejs-1.1.6"), nil},
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- teardownPackTest := setupPackTest(t)
- defer teardownPackTest(t)
- ctx := context.Background()
- actual, err := getBuildpackName(ctx, tt.input)
- if actual != tt.expected.name {
- t.Errorf("got %s, want %s", actual, tt.expected.name)
- }
- if err != nil && tt.expected.err == nil {
- t.Errorf("got unexpected error: %s", err.Error())
- }
- if err == nil && tt.expected.err != nil {
- t.Errorf("missing expected error %s", tt.expected.err)
- }
- if err != nil && tt.expected.err != nil {
- if err.Error() != tt.expected.err.Error() {
- t.Errorf("wrong error: %v", err)
- }
- }
- })
- }
- }
|