github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/node/service_test.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:40</date>
    10  //</624450102689271808>
    11  
    12  
    13  package node
    14  
    15  import (
    16  	"fmt"
    17  	"io/ioutil"
    18  	"os"
    19  	"path/filepath"
    20  	"testing"
    21  )
    22  
    23  //测试数据库是否基于
    24  //配置的服务上下文。
    25  func TestContextDatabases(t *testing.T) {
    26  //创建临时文件夹并确保其中不包含任何数据库
    27  	dir, err := ioutil.TempDir("", "")
    28  	if err != nil {
    29  		t.Fatalf("failed to create temporary data directory: %v", err)
    30  	}
    31  	defer os.RemoveAll(dir)
    32  
    33  	if _, err := os.Stat(filepath.Join(dir, "database")); err == nil {
    34  		t.Fatalf("non-created database already exists")
    35  	}
    36  //请求打开/创建一个数据库,并确保它一直存在于磁盘上
    37  	ctx := &ServiceContext{config: &Config{Name: "unit-test", DataDir: dir}}
    38  	db, err := ctx.OpenDatabase("persistent", 0, 0)
    39  	if err != nil {
    40  		t.Fatalf("failed to open persistent database: %v", err)
    41  	}
    42  	db.Close()
    43  
    44  	if _, err := os.Stat(filepath.Join(dir, "unit-test", "persistent")); err != nil {
    45  		t.Fatalf("persistent database doesn't exists: %v", err)
    46  	}
    47  //请求打开/创建临时数据库,并确保它不会持久化。
    48  	ctx = &ServiceContext{config: &Config{DataDir: ""}}
    49  	db, err = ctx.OpenDatabase("ephemeral", 0, 0)
    50  	if err != nil {
    51  		t.Fatalf("failed to open ephemeral database: %v", err)
    52  	}
    53  	db.Close()
    54  
    55  	if _, err := os.Stat(filepath.Join(dir, "ephemeral")); err == nil {
    56  		t.Fatalf("ephemeral database exists")
    57  	}
    58  }
    59  
    60  //已经构造了服务的测试可以由以后的测试检索。
    61  func TestContextServices(t *testing.T) {
    62  	stack, err := New(testNodeConfig())
    63  	if err != nil {
    64  		t.Fatalf("failed to create protocol stack: %v", err)
    65  	}
    66  //定义一个验证器,确保noopa在它之前,noopb在它之后。
    67  	verifier := func(ctx *ServiceContext) (Service, error) {
    68  		var objA *NoopServiceA
    69  		if ctx.Service(&objA) != nil {
    70  			return nil, fmt.Errorf("former service not found")
    71  		}
    72  		var objB *NoopServiceB
    73  		if err := ctx.Service(&objB); err != ErrServiceUnknown {
    74  			return nil, fmt.Errorf("latters lookup error mismatch: have %v, want %v", err, ErrServiceUnknown)
    75  		}
    76  		return new(NoopService), nil
    77  	}
    78  //注册服务集合
    79  	if err := stack.Register(NewNoopServiceA); err != nil {
    80  		t.Fatalf("former failed to register service: %v", err)
    81  	}
    82  	if err := stack.Register(verifier); err != nil {
    83  		t.Fatalf("failed to register service verifier: %v", err)
    84  	}
    85  	if err := stack.Register(NewNoopServiceB); err != nil {
    86  		t.Fatalf("latter failed to register service: %v", err)
    87  	}
    88  //启动协议栈并确保服务按顺序构造
    89  	if err := stack.Start(); err != nil {
    90  		t.Fatalf("failed to start stack: %v", err)
    91  	}
    92  	defer stack.Stop()
    93  }
    94