github.com/igggame/nebulas-go@v2.1.0+incompatible/common/dag/dispatcher_test.go (about) 1 // it under the terms of the GNU General Public License as published by 2 // the Free Software Foundation, either version 3 of the License, or 3 // (at your option) any later version. 4 // 5 // the go-nebulas library is distributed in the hope that it will be useful, 6 // but WITHOUT ANY WARRANTY; without even the implied warranty of 7 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 8 // GNU General Public License for more details. 9 // 10 // You should have received a copy of the GNU General Public License 11 // along with the go-nebulas library. If not, see <http://www.gnu.org/licenses/>. 12 // 13 14 package dag 15 16 import ( 17 "errors" 18 "flag" 19 "fmt" 20 "runtime" 21 "testing" 22 "time" 23 24 "github.com/stretchr/testify/assert" 25 ) 26 27 func TestDispatcher_Start1(t *testing.T) { 28 flag.Set("v", "true") 29 flag.Set("log_dir", "/tmp") 30 flag.Set("v", "3") 31 flag.Parse() 32 33 /* 34 1 16 35 / \ / \ 36 2 3 17 18 37 / / \ \ 38 4 5 6 19 39 / / \ / \ 40 7 8 9 10 11 41 \/ 42 12 43 / \ 44 13 14 45 / 46 15 47 */ 48 dag := NewDag() 49 50 dag.AddNode("1") 51 dag.AddNode("2") 52 dag.AddNode("3") 53 dag.AddNode("4") 54 dag.AddNode("5") 55 dag.AddNode("6") 56 dag.AddNode("7") 57 dag.AddNode("8") 58 dag.AddNode("9") 59 dag.AddNode("10") 60 dag.AddNode("11") 61 dag.AddNode("12") 62 dag.AddNode("13") 63 dag.AddNode("14") 64 dag.AddNode("15") 65 dag.AddNode("16") 66 dag.AddNode("17") 67 dag.AddNode("18") 68 dag.AddNode("19") 69 // Add the edges (Note that given vertices must exist before adding an 70 // edge between them) 71 dag.AddEdge("1", "2") 72 dag.AddEdge("1", "3") 73 dag.AddEdge("2", "4") 74 dag.AddEdge("3", "5") 75 dag.AddEdge("3", "6") 76 dag.AddEdge("4", "7") 77 dag.AddEdge("5", "8") 78 dag.AddEdge("5", "9") 79 dag.AddEdge("6", "10") 80 dag.AddEdge("6", "11") 81 dag.AddEdge("9", "12") 82 dag.AddEdge("10", "12") 83 dag.AddEdge("12", "13") 84 dag.AddEdge("13", "15") 85 dag.AddEdge("12", "14") 86 87 dag.AddEdge("15", "8") 88 89 dag.AddEdge("16", "17") 90 dag.AddEdge("16", "18") 91 dag.AddEdge("18", "19") 92 93 //dag.AddEdge("19", "16") 94 95 runtime.GOMAXPROCS(runtime.NumCPU()) 96 97 msg, err := dag.ToProto() 98 assert.Nil(t, err) 99 100 dag1 := NewDag() 101 dag1.FromProto(msg) 102 103 txs := make([]string, 2) 104 txs[0] = "a" 105 txs[1] = "b" 106 107 fmt.Println("runtime.NumCPU():", runtime.NumCPU()) 108 dp := NewDispatcher(dag, runtime.NumCPU(), 0, txs, func(node *Node, a interface{}) error { 109 fmt.Println("dag Dispatcher key:", node.key, node.index) 110 111 if node.key == 12 { 112 fmt.Println(a) 113 time.Sleep(time.Millisecond * 300) 114 //return errors.New("test") 115 return nil 116 } 117 time.Sleep(time.Millisecond * 100) 118 return nil 119 }) 120 121 err = dp.Run() 122 assert.Nil(t, err) 123 124 dp1 := NewDispatcher(dag, runtime.NumCPU(), 1, txs, func(node *Node, a interface{}) error { 125 fmt.Println("key:", node.key, node.index) 126 127 if node.key == 12 { 128 fmt.Println(a) 129 time.Sleep(time.Millisecond * 300) 130 //return errors.New("test") 131 return nil 132 } 133 time.Sleep(time.Millisecond * 100) 134 return nil 135 }) 136 137 err = dp1.Run() 138 assert.NotNil(t, err) 139 140 dag2 := NewDag() 141 dag2.AddNode("1") 142 143 fmt.Println("runtime.NumCPU():", runtime.NumCPU()) 144 dp2 := NewDispatcher(dag2, 8, 0, txs, func(node *Node, a interface{}) error { 145 fmt.Println("key:", node.key, node.index) 146 return nil 147 }) 148 149 err = dp2.Run() 150 assert.Nil(t, err) 151 152 dag.AddEdge("19", "16") 153 154 dp3 := NewDispatcher(dag, 8, 0, txs, func(node *Node, a interface{}) error { 155 return errors.New("test error") 156 }) 157 158 err = dp3.Run() 159 assert.NotNil(t, err) 160 }