github.com/mergetb/u-root@v4.0.1-0.20190719191109-b70b86b73e5b+incompatible/pkg/abi/flag_test.go (about)

     1  // Copyright 2018 the u-root 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 abi
     6  
     7  import (
     8  	"testing"
     9  
    10  	"golang.org/x/sys/unix"
    11  )
    12  
    13  // From the cros docs
    14  // Bits	 Content	 Notes
    15  // 63-57	 Unused
    16  // 56	 Successful Boot Flag
    17  //Set to 1 the first time the system has successfully booted from this partition (see the File System/Autoupdate design document for the definition of success).
    18  // 55-52	 Tries Remaining	Number of times to attempt booting this partition. Used only when the Successful Boot Flag is 0.
    19  // 51-48	 Priority	4-bit number: 15 = highest, 1 = lowest, 0 = not bootable.
    20  // 47-0	 Reserved by EFI Spec
    21  func TestCrosGPT(t *testing.T) {
    22  	var tests = []struct {
    23  		n string
    24  		f FlagSet
    25  		v uint64
    26  		o string
    27  	}{
    28  		{n: "Basic ChromeOS GPT flags",
    29  			f: FlagSet{
    30  				&BitFlag{Name: "Suc", Value: 1 << 56},
    31  				&Field{Name: "Tries", BitMask: 15 << 52, Shift: 52},
    32  				&Field{Name: "prio", BitMask: 15 << 48, Shift: 48},
    33  			},
    34  			v: 1<<56 | 8<<52 | 3<<48,
    35  			o: "Suc|Tries=0x8|prio=0x3",
    36  		},
    37  		{n: "Basic ChromeOS GPT flags with standard GPT value",
    38  			f: FlagSet{
    39  				&BitFlag{Name: "Suc", Value: 1 << 56},
    40  				&Field{Name: "Tries", BitMask: 15 << 52, Shift: 52},
    41  				&Field{Name: "prio", BitMask: 15 << 48, Shift: 48},
    42  			},
    43  			v: 1<<56 | 8<<52 | 3<<48 | 1,
    44  			o: "Suc|Tries=0x8|prio=0x3|0x1",
    45  		},
    46  		{n: "Simple system call",
    47  			f: FlagSet{
    48  				&Value{Name: "write", Value: unix.SYS_WRITE},
    49  			},
    50  			v: unix.SYS_WRITE,
    51  			o: "write",
    52  		},
    53  	}
    54  	for _, tc := range tests {
    55  		t.Run(tc.n, func(t *testing.T) {
    56  			s := tc.f.Parse(tc.v)
    57  			if s != tc.o {
    58  				t.Fatalf("Got %s, want %s", s, tc.o)
    59  			}
    60  		})
    61  	}
    62  }