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  }