| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package zbi |
| |
| import ( |
| "bytes" |
| "context" |
| "os" |
| "path/filepath" |
| "strings" |
| "testing" |
| ) |
| |
| // createScript returns the path to a bash script that outputs its name and |
| // all its arguments on the first line. |
| // |
| // Then it cats the input file, which we assume is the last argument. |
| func createScript(t *testing.T) string { |
| contents := `#!/bin/bash |
| echo "$0 $@" |
| file="${@: -1}" |
| cat "$file" |
| ` |
| name := filepath.Join(t.TempDir(), "zbi.sh") |
| if err := os.WriteFile(name, []byte(contents), 0o700); err != nil { |
| t.Fatal(err) |
| } |
| return name |
| } |
| |
| func checkEq(t *testing.T, name string, actual string, expected string) { |
| if actual != expected { |
| t.Fatalf("%s check failed. Actual: \"%s\". Expected: \"%s\".", name, actual, expected) |
| } |
| } |
| |
| func TestNoArguments(t *testing.T) { |
| var output bytes.Buffer |
| zbiTool, err := NewZBIToolWithStdout(createScript(t), &output) |
| if err != nil { |
| t.Fatalf("Failed to create ZBI tool: %s", err) |
| } |
| |
| zbiTool.MakeImageArgsZbi(context.Background(), "destination/path", map[string]string{}) |
| if err != nil { |
| t.Fatalf("Failed to create ZBI: %s", err) |
| } |
| |
| outputs := strings.Split(output.String(), "\n") |
| args := strings.Split(outputs[0], " ") |
| if len(args) < 1 { |
| t.Fatal("Too few arguments.") |
| } |
| |
| var destPath string |
| var itemType string |
| for i, arg := range args { |
| if arg == "--output" { |
| if i+1 < len(args) { |
| destPath = args[i+1] |
| } |
| } |
| if arg == "--type" { |
| if i+1 < len(args) { |
| itemType = args[i+1] |
| } |
| } |
| } |
| checkEq(t, "destination path", destPath, "destination/path") |
| checkEq(t, "type", itemType, "IMAGE_ARGS") |
| } |
| |
| func TestArguments(t *testing.T) { |
| var output bytes.Buffer |
| zbiTool, err := NewZBIToolWithStdout(createScript(t), &output) |
| if err != nil { |
| t.Fatalf("Failed to create ZBI tool: %s", err) |
| } |
| |
| zbiTool.MakeImageArgsZbi(context.Background(), "destination/path", map[string]string{ |
| "key1": "value1", |
| "key2": "value2", |
| "key3": "value3", |
| }) |
| if err != nil { |
| t.Fatalf("Failed to create ZBI: %s", err) |
| } |
| |
| outputs := strings.Split(output.String(), "\n") |
| args := strings.Split(outputs[0], " ") |
| if len(args) < 1 { |
| t.Fatal("Too few arguments.") |
| } |
| |
| var destPath string |
| var itemType string |
| for i, arg := range args { |
| if arg == "--output" { |
| if i+1 < len(args) { |
| destPath = args[i+1] |
| } |
| } |
| if arg == "--type" { |
| if i+1 < len(args) { |
| itemType = args[i+1] |
| } |
| } |
| } |
| checkEq(t, "destination path", destPath, "destination/path") |
| checkEq(t, "type", itemType, "IMAGE_ARGS") |
| |
| imageArgs := make(map[string]string) |
| for _, out := range outputs { |
| keyValue := strings.Split(out, "=") |
| if len(keyValue) != 2 { |
| continue |
| } |
| imageArgs[keyValue[0]] = keyValue[1] |
| } |
| |
| checkEq(t, "first property", imageArgs["key1"], "value1") |
| checkEq(t, "second property", imageArgs["key2"], "value2") |
| checkEq(t, "third property", imageArgs["key3"], "value3") |
| } |