github.com/hikaru7719/go@v0.0.0-20181025140707-c8b2ac68906a/src/internal/traceparser/parser_test.go (about)

     1  // Copyright 2018 The Go 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 traceparser
     6  
     7  import (
     8  	"io/ioutil"
     9  	"os"
    10  	"path/filepath"
    11  	"runtime"
    12  	"strings"
    13  	"testing"
    14  )
    15  
    16  var (
    17  	// testfiles from the old trace parser
    18  	otherDir = "../trace/testdata/"
    19  	want     = map[string]bool{"http_1_9_good": true, "http_1_10_good": true, "http_1_11_good": true,
    20  		"stress_1_9_good": true, "stress_1_10_good": true, "stress_1_11_good": true,
    21  		"stress_start_stop_1_9_good": true, "stress_start_stop_1_10_good": true,
    22  		"stress_start_stop_1_11_good": true, "user_task_span_1_11_good": true,
    23  
    24  		"http_1_5_good": false, "http_1_7_good": false,
    25  		"stress_1_5_good": false, "stress_1_5_unordered": false, "stress_1_7_good": false,
    26  		"stress_start_stop_1_5_good": false, "stress_start_stop_1_7_good": false,
    27  	}
    28  )
    29  
    30  func TestRemoteFiles(t *testing.T) {
    31  	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
    32  		t.Skipf("files from outside the package are not available on %s/%s", runtime.GOOS, runtime.GOARCH)
    33  	}
    34  	files, err := ioutil.ReadDir(otherDir)
    35  	if err != nil {
    36  		t.Fatal(err)
    37  	}
    38  	for _, f := range files {
    39  		fname := filepath.Join(otherDir, f.Name())
    40  		p, err := New(fname)
    41  		if err == nil {
    42  			err = p.Parse(0, 1<<62, nil)
    43  		}
    44  		if err == nil != want[f.Name()] {
    45  			t.Errorf("%s: got %v expected %v, err=%v",
    46  				f.Name(), err == nil, want[f.Name()], err)
    47  		}
    48  	}
    49  }
    50  
    51  func TestLocalFiles(t *testing.T) {
    52  
    53  	files, err := ioutil.ReadDir("./testdata")
    54  	if err != nil {
    55  		t.Fatalf("failed to read ./testdata: %v", err)
    56  	}
    57  	for _, f := range files {
    58  		fname := filepath.Join("./testdata", f.Name())
    59  		p, err := New(fname)
    60  		if err == nil {
    61  			err = p.Parse(0, 1<<62, nil)
    62  		}
    63  		switch {
    64  		case strings.Contains(f.Name(), "good"),
    65  			strings.Contains(f.Name(), "weird"):
    66  			if err != nil {
    67  				t.Errorf("unexpected failure %v %s", err, f.Name())
    68  			}
    69  		case strings.Contains(f.Name(), "bad"):
    70  			if err == nil {
    71  				t.Errorf("bad file did not fail %s", f.Name())
    72  			}
    73  		default:
    74  			t.Errorf("untyped file %v %s", err, f.Name())
    75  		}
    76  	}
    77  }
    78  
    79  func TestStats(t *testing.T) {
    80  	// Need just one good file to see that OSStats work properly,
    81  	files, err := ioutil.ReadDir("./testdata")
    82  	if err != nil {
    83  		t.Fatal(err)
    84  	}
    85  	for _, f := range files {
    86  		if !strings.HasPrefix(f.Name(), "good") {
    87  			continue
    88  		}
    89  		fname := filepath.Join("./testdata", f.Name())
    90  		p, err := New(fname)
    91  		if err != nil {
    92  			t.Fatal(err)
    93  		}
    94  		stat := p.OSStats()
    95  		if stat.Bytes == 0 || stat.Seeks == 0 || stat.Reads == 0 {
    96  			t.Errorf("OSStats impossible %v", stat)
    97  		}
    98  		fd, err := os.Open(fname)
    99  		if err != nil {
   100  			t.Fatal(err)
   101  		}
   102  		pb, err := ParseBuffer(fd)
   103  		if err != nil {
   104  			t.Fatal(err)
   105  		}
   106  		stat = pb.OSStats()
   107  		if stat.Seeks != 0 || stat.Reads != 0 {
   108  			t.Errorf("unexpected positive results %v", stat)
   109  		}
   110  	}
   111  }