github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/dt/fdt_test.go (about)

     1  // Copyright 2019 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 dt
     6  
     7  import (
     8  	"encoding/json"
     9  	"io/ioutil"
    10  	"os"
    11  	"os/exec"
    12  	"reflect"
    13  	"testing"
    14  )
    15  
    16  func TestRead(t *testing.T) {
    17  	f, err := os.Open("testdata/fdt.dtb")
    18  	if err != nil {
    19  		t.Fatal(err)
    20  	}
    21  	defer f.Close()
    22  
    23  	jsonData, err := ioutil.ReadFile("testdata/fdt.json")
    24  	if err != nil {
    25  		t.Fatal(err)
    26  	}
    27  	testData := &FDT{}
    28  	if err := json.Unmarshal(jsonData, testData); err != nil {
    29  		t.Fatal(err)
    30  	}
    31  
    32  	fdt, err := ReadFDT(f)
    33  	if err != nil {
    34  		t.Fatal(err)
    35  	}
    36  
    37  	if !reflect.DeepEqual(fdt, testData) {
    38  		got, err := json.MarshalIndent(fdt, "", "    ")
    39  		if err != nil {
    40  			t.Fatal(err)
    41  		}
    42  		t.Errorf(`Read("fdt.dtb") = %s`, got)
    43  		t.Errorf(`want %s`, jsonData)
    44  	}
    45  }
    46  
    47  // TestParity tests that the fdt Read+Write operations are compatible with your
    48  // system's fdtdump command.
    49  func TestParity(t *testing.T) {
    50  	// TODO: I'm convinced my system's fdtdump command is broken.
    51  	t.Skip()
    52  
    53  	// Read and write the fdt.
    54  	f, err := os.Open("testdata/fdt.dtb")
    55  	if err != nil {
    56  		t.Fatal(err)
    57  	}
    58  	fdt, err := ReadFDT(f)
    59  	f.Close()
    60  	if err != nil {
    61  		t.Fatal(err)
    62  	}
    63  	f, err = os.Create("testdata/fdt2.dtb")
    64  	if err != nil {
    65  		t.Fatal(err)
    66  	}
    67  	_, err = fdt.Write(f)
    68  	f.Close()
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  
    73  	// Run your system's fdtdump command.
    74  	f, err = os.Create("testdata/fdt2.dts")
    75  	if err != nil {
    76  		t.Fatal(err)
    77  	}
    78  	cmd := exec.Command("fdtdump", "testdata/fdt2.dtb")
    79  	cmd.Stdout = f
    80  	err = cmd.Run()
    81  	f.Close()
    82  	if err != nil {
    83  		t.Fatal(err) // TODO: skip if system does not have fdtdump
    84  	}
    85  
    86  	cmd = exec.Command("diff", "testdata/fdt.dts", "testdata/fdt2.dts")
    87  	cmd.Stdout = os.Stdout
    88  	cmd.Stderr = os.Stderr
    89  	cmd.Run()
    90  }