go.fuchsia.dev/infra@v0.0.0-20240507153436-9b593402251b/cmd/size_check/sizes/sizes_test.go (about)

     1  // Copyright 2022 The Fuchsia Authors.
     2  // Use of this source code is governed by a BSD-style license that can be
     3  // found in the LICENSE file.
     4  
     5  package sizes
     6  
     7  import (
     8  	"testing"
     9  
    10  	"github.com/google/go-cmp/cmp"
    11  )
    12  
    13  func TestParseBinarySizes(t *testing.T) {
    14  	t.Parallel()
    15  
    16  	tests := []struct {
    17  		name      string
    18  		raw       map[string]any
    19  		expected  BinarySizes
    20  		expectErr bool
    21  	}{
    22  		{
    23  			name: "two components",
    24  			raw: map[string]any{
    25  				"componentA":             float64(30),
    26  				"componentA.budget":      float64(50),
    27  				"componentA.creepBudget": float64(10),
    28  				"componentA.owner":       "owner@componentA.dev",
    29  				"componentB":             float64(20),
    30  				"componentB.budget":      float64(40),
    31  				"componentB.creepBudget": float64(5),
    32  				"componentB.owner":       "owner@componentB.dev",
    33  			},
    34  			expected: BinarySizes{
    35  				"componentA": {
    36  					Size:        30,
    37  					Budget:      50,
    38  					CreepBudget: 10,
    39  				},
    40  				"componentB": {
    41  					Size:        20,
    42  					Budget:      40,
    43  					CreepBudget: 5,
    44  				},
    45  			},
    46  			expectErr: false,
    47  		},
    48  		{
    49  			name: "unexpected non-float64",
    50  			raw: map[string]any{
    51  				"componentA":             "30",
    52  				"componentA.creepBudget": float64(10),
    53  				"componentA.owner":       "owner@componentA.dev",
    54  			},
    55  			expected:  nil,
    56  			expectErr: true,
    57  		},
    58  		{
    59  			name: "missing budget",
    60  			raw: map[string]any{
    61  				"componentA":             float64(30),
    62  				"componentA.creepBudget": float64(10),
    63  				"componentA.owner":       "owner@componentA.dev",
    64  			},
    65  			expected:  nil,
    66  			expectErr: true,
    67  		},
    68  		{
    69  			name: "missing creep budget",
    70  			raw: map[string]any{
    71  				"componentA":        float64(30),
    72  				"componentA.budget": float64(50),
    73  				"componentA.owner":  "owner@componentA.dev",
    74  			},
    75  			expected:  nil,
    76  			expectErr: true,
    77  		},
    78  	}
    79  
    80  	for _, test := range tests {
    81  		t.Run(test.name, func(t *testing.T) {
    82  			parsed, err := Parse(test.raw)
    83  			if err != nil {
    84  				if test.expectErr {
    85  					return
    86  				}
    87  				t.Fatalf("got unexpected error: %s", err)
    88  			} else if test.expectErr {
    89  				t.Fatalf("expected error, got nil")
    90  			}
    91  			if diff := cmp.Diff(test.expected, parsed); diff != "" {
    92  				t.Fatalf("different (-want +got):\n%s", diff)
    93  			}
    94  		})
    95  	}
    96  }