github.com/linuxboot/fiano@v1.2.0/pkg/guid2english/transformer_test.go (about) 1 // Copyright 2019 the LinuxBoot Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package guid2english 6 7 import ( 8 "bytes" 9 "io" 10 "strings" 11 "testing" 12 "text/template" 13 14 "golang.org/x/text/transform" 15 ) 16 17 func TestTransformer(t *testing.T) { 18 // transform.NewReader internally build 4096 long buffers so 19 // prepare a string almost that long to trigger boundary checks 20 long4080String := strings.Repeat("ghijklmnopqrstuvwxyz", 204) 21 22 tests := []struct { 23 name string 24 input string 25 tmpl string 26 output string 27 }{ 28 { 29 name: "empty", 30 input: "", 31 tmpl: "", 32 output: "", 33 }, 34 { 35 name: "single GUID", 36 input: "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1", 37 tmpl: "{{.GUID}}", 38 output: "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1", 39 }, 40 { 41 name: "replace with name", 42 input: "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1", 43 tmpl: "{{.Name}}", 44 output: "Shell", 45 }, 46 { 47 name: "name and GUID", 48 input: "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1", 49 tmpl: "{{.GUID}} ({{.Name}})", 50 output: "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 (Shell)", 51 }, 52 { 53 name: "unknown name and GUID", 54 input: "fff4A583-9E3E-4F1C-BD65-E05268D0B4D1", 55 tmpl: "{{.GUID}} ({{.Name}})", 56 output: "FFF4A583-9E3E-4F1C-BD65-E05268D0B4D1 (UNKNOWN)", 57 }, 58 { 59 name: "advanced formatting", 60 input: "fff4A583-9E3E-4F1C-BD65-E05268D0B4D1", 61 tmpl: "{{if .IsKnown}}KNOWN{{else}}UNKNOWN{{end}}", 62 output: "UNKNOWN", 63 }, 64 { 65 name: "multiple GUIDs", 66 input: ` 67 Running 7C04A583-9E3E-4F1C-AD65-E05268D0B4D1... 68 Cannot find fff4A583-9E3E-4F1C-BD65-E05268D0B4D1... 69 Waiting for D5125E0F-1226-444F-A218-0085996ED5DA? 70 `, 71 tmpl: "{{.GUID}} ({{.Name}})", 72 output: ` 73 Running 7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 (Shell)... 74 Cannot find FFF4A583-9E3E-4F1C-BD65-E05268D0B4D1 (UNKNOWN)... 75 Waiting for D5125E0F-1226-444F-A218-0085996ED5DA (Smbus)? 76 `, 77 }, 78 { 79 name: "handle ErrShortDst", 80 input: strings.Repeat("7C04A583-9E3E-4F1C-AD65-E05268D0B4D1", 112), 81 tmpl: "{{.GUID}} ({{.Name}})", 82 output: strings.Repeat("7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 (Shell)", 112), 83 }, 84 { 85 name: "long buffer with GUID cut by 4096 boundary", 86 input: long4080String + "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1", 87 tmpl: "{{.GUID}} ({{.Name}})", 88 output: long4080String + "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 (Shell)", 89 }, 90 { 91 name: "very long buffer", 92 input: long4080String + long4080String + "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1", 93 tmpl: "{{.GUID}} ({{.Name}})", 94 output: long4080String + long4080String + "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 (Shell)", 95 }, 96 { 97 name: "4096 buffer with GUID at end", 98 input: long4080String[:4096-36] + "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1", 99 tmpl: "{{.GUID}} ({{.Name}})", 100 output: long4080String[:4096-36] + "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 (Shell)", 101 }, 102 { 103 name: "4096 buffer with GUID at start and end, long template", 104 input: "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1" + long4080String[:4096-36-36] + "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1", 105 tmpl: "{{.GUID}} {{.GUID}} ({{.Name}})", 106 output: "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 (Shell)" + long4080String[:4096-36-36] + "7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 (Shell)", 107 }, 108 } 109 110 for _, tt := range tests { 111 t.Run(tt.name, func(t *testing.T) { 112 input := bytes.NewBufferString(tt.input) 113 tmpl, err := template.New("guid2english").Parse(tt.tmpl) 114 if err != nil { 115 t.Fatalf("template not valid: %v", err) 116 } 117 118 trans := New(NewTemplateMapper(tmpl)) 119 120 output := &bytes.Buffer{} 121 _, err = io.Copy(output, transform.NewReader(input, trans)) 122 if err != nil { 123 t.Errorf("error copying buffer: %v", err) 124 } 125 126 if output.String() != tt.output { 127 t.Errorf("got %q, want %q", output.Bytes(), tt.output) 128 } 129 }) 130 } 131 }