github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/radar/orgchain/radar_test.go (about)

     1  package orgchain
     2  
     3  import (
     4  	"testing"
     5  
     6  	"os"
     7  
     8  	"log"
     9  
    10  	"fmt"
    11  
    12  	"path"
    13  
    14  	"github.com/magiconair/properties/assert"
    15  	maintypes "github.com/sixexorg/magnetic-ring/core/mainchain/types"
    16  	"github.com/sixexorg/magnetic-ring/mock"
    17  	mainstorages "github.com/sixexorg/magnetic-ring/store/mainchain/storages"
    18  	"github.com/sixexorg/magnetic-ring/store/orgchain/genesis"
    19  	"github.com/sixexorg/magnetic-ring/store/orgchain/states"
    20  	"github.com/sixexorg/magnetic-ring/store/orgchain/storages"
    21  	"github.com/sixexorg/magnetic-ring/store/storelaw"
    22  )
    23  
    24  func TestEntireProcess(t *testing.T) {
    25  	dbdir := "test"
    26  	defer os.RemoveAll(dbdir)
    27  	ledger, _ := storages.NewLedgerStore(path.Join(dbdir, "org"))
    28  	mainLedger, _ := mainstorages.NewLedgerStore(path.Join(dbdir, "main"))
    29  	tx := mock.CreateLeagueTx
    30  	mainBlock := &maintypes.Block{
    31  		Header: &maintypes.Header{
    32  			Height:    1,
    33  			Timestamp: mock.OrgTimeSpan,
    34  		},
    35  		Transactions: maintypes.Transactions{tx},
    36  	}
    37  	mainLedger.SaveBlockForMockTest(mainBlock)
    38  
    39  	radar := NewRadar()
    40  	txCh := make(chan *maintypes.Transaction)
    41  	go func() { txCh <- tx }()
    42  	block, _, _, _, _, sts := radar.MonitorGenesis(txCh, mainstorages.GetLightLedger(), tx.TxData.From)
    43  	state := genesis.NewGensisState(mock.CreateLeagueTx)
    44  	sts2 := states.AccountStates{state}
    45  	stroot := sts2.GetHashRoot()
    46  	mock.Block1.Header.StateRoot = stroot
    47  	assert.Equal(t, stroot, sts.GetHashRoot())
    48  
    49  	blocknew := mock.Block1
    50  	fmt.Println(blocknew.Header.LeagueId.ToString())
    51  	if block.Hash() != blocknew.Hash() {
    52  		t.Fail()
    53  		t.Error("diffent between mock and executed")
    54  		t.Log("\nblock1:", block.Hash().String(), "\nblock2", mock.Block1.Hash().String())
    55  	}
    56  	//err := accountStore.Save(state)
    57  	err := ledger.SaveAccount(sts[0])
    58  	if err != nil {
    59  		t.Fail()
    60  		t.Error(err)
    61  		return
    62  	}
    63  
    64  	blk1 := &storelaw.OrgBlockInfo{
    65  		Block: block,
    66  	}
    67  	blk2 := &storelaw.OrgBlockInfo{
    68  		Block: mock.Block2,
    69  	}
    70  	ledger.SaveAll(blk1)
    71  	ledger.SaveAll(blk2)
    72  
    73  	//there can do a for loop here
    74  	re := radar.RoutingMainTx(mock.ConfirmTx)
    75  	select {
    76  	case orgTx := <-re.ORGTX:
    77  		t.Log(orgTx.Hash().String())
    78  		return
    79  	case mcc := <-re.MCC:
    80  		blocks, err := radar.GetBlocks(mcc.Start, mcc.End)
    81  		if err != nil {
    82  			t.Error(err)
    83  			t.Fail()
    84  			return
    85  		}
    86  		result := radar.VerifyMainAndLeague(blocks)
    87  		if !result {
    88  			t.Log("failed")
    89  			t.Fail()
    90  			return
    91  		}
    92  	case err := <-re.Err:
    93  		log.Println(err.Error())
    94  		return
    95  	}
    96  
    97  }