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  }