diff --git a/plugins/bundleprocessor/bundleprocessor_test.go b/plugins/bundleprocessor/bundleprocessor_test.go index b8cdd9dff394698e397c85f7a7ff09915a825d10..6505583f451516b7db36c7d5a0c20d90d56fa490 100644 --- a/plugins/bundleprocessor/bundleprocessor_test.go +++ b/plugins/bundleprocessor/bundleprocessor_test.go @@ -68,74 +68,66 @@ func TestValidateSignatures(t *testing.T) { assert.Equal(t, successful, true, "validation failed") } -func TestProcessSolidBundleHead_Data(t *testing.T) { +func TestProcessSolidBundleHead(t *testing.T) { // start a test node node.Start(node.Plugins(tangle.PLUGIN, PLUGIN)) defer node.Shutdown() - bundleFactory := client.NewBundleFactory() - bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage") - bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage") + t.Run("data", func(t *testing.T) { + bundleFactory := client.NewBundleFactory() + bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage") + bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage") - generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip()) + generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip()) + for _, transaction := range generatedBundle.GetTransactions() { + tangle.StoreTransaction(transaction) + } - for _, transaction := range generatedBundle.GetTransactions() { - tangle.StoreTransaction(transaction) - } + var wg sync.WaitGroup + testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) { + assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash") + assert.Equal(t, bundle.IsValueBundle(), false, "invalid value bundle status") - var wg sync.WaitGroup + wg.Done() + }) + Events.BundleSolid.Attach(testResults) + defer Events.BundleSolid.Detach(testResults) - testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) { - assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash") - assert.Equal(t, bundle.IsValueBundle(), false, "invalid value bundle status") + wg.Add(1) + if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil { + t.Error(err) + } - wg.Done() + wg.Wait() }) - Events.BundleSolid.Attach(testResults) - defer Events.BundleSolid.Detach(testResults) - - wg.Add(1) - if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil { - t.Error(err) - } - - wg.Wait() -} - -func TestProcessSolidBundleHead_Value(t *testing.T) { - // start a test node - node.Start(node.Plugins(tangle.PLUGIN, PLUGIN)) - defer node.Shutdown() + t.Run("value", func(t *testing.T) { + bundleFactory := client.NewBundleFactory() + bundleFactory.AddInput(seed.GetAddress(0), -400) + bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage") + bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage") - bundleFactory := client.NewBundleFactory() - bundleFactory.AddInput(seed.GetAddress(0), -400) - bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage") - bundleFactory.AddOutput(client.NewAddress("SJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9ZYFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCM"), 400, "Testmessage") + generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip()) + for _, transaction := range generatedBundle.GetTransactions() { + tangle.StoreTransaction(transaction) + } - generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip()) + var wg sync.WaitGroup + testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) { + assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash") + assert.Equal(t, bundle.IsValueBundle(), true, "invalid value bundle status") - for _, transaction := range generatedBundle.GetTransactions() { - tangle.StoreTransaction(transaction) - } + wg.Done() + }) - var wg sync.WaitGroup + wg.Add(1) + Events.BundleSolid.Attach(testResults) + defer Events.BundleSolid.Detach(testResults) - testResults := events.NewClosure(func(bundle *bundle.Bundle, transactions []*value_transaction.ValueTransaction) { - assert.Equal(t, bundle.GetHash(), generatedBundle.GetTransactions()[0].GetHash(), "invalid bundle hash") - assert.Equal(t, bundle.IsValueBundle(), true, "invalid value bundle status") + if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil { + t.Error(err) + } - wg.Done() + wg.Wait() }) - - Events.BundleSolid.Attach(testResults) - defer Events.BundleSolid.Detach(testResults) - - wg.Add(1) - - if err := ProcessSolidBundleHead(generatedBundle.GetTransactions()[0]); err != nil { - t.Error(err) - } - - wg.Wait() } diff --git a/plugins/bundleprocessor/plugin.go b/plugins/bundleprocessor/plugin.go index 0f013307ae34e8de1e86d1006dfbd3adfce4badf..ad4ecb52eb13fcb1ea3b03a6947a2e0e9f3fc52d 100644 --- a/plugins/bundleprocessor/plugin.go +++ b/plugins/bundleprocessor/plugin.go @@ -13,8 +13,9 @@ import ( var PLUGIN = node.NewPlugin("Bundle Processor", node.Enabled, configure, run) var log *logger.Logger -func configure(plugin *node.Plugin) { +func configure(*node.Plugin) { log = logger.NewLogger("Bundle Processor") + tangle.Events.TransactionSolid.Attach(events.NewClosure(func(tx *value_transaction.ValueTransaction) { if tx.IsHead() { workerPool.Submit(tx) @@ -26,7 +27,7 @@ func configure(plugin *node.Plugin) { })) } -func run(plugin *node.Plugin) { +func run(*node.Plugin) { log.Info("Starting Bundle Processor ...") daemon.BackgroundWorker("Bundle Processor", func(shutdownSignal <-chan struct{}) { @@ -34,7 +35,7 @@ func run(plugin *node.Plugin) { workerPool.Start() <-shutdownSignal log.Info("Stopping Bundle Processor ...") - workerPool.Stop() + workerPool.StopAndWait() log.Info("Stopping Bundle Processor ... done") }) @@ -45,7 +46,7 @@ func run(plugin *node.Plugin) { valueBundleProcessorWorkerPool.Start() <-shutdownSignal log.Info("Stopping Value Bundle Processor ...") - valueBundleProcessorWorkerPool.Stop() + valueBundleProcessorWorkerPool.StopAndWait() log.Info("Stopping Value Bundle Processor ... done") }) } diff --git a/plugins/tangle/approvers.go b/plugins/tangle/approvers.go index fd4461aa1e3cac8e3619652f1731df050f206b68..38d44aa9081d62e6f47710cf31c8c2c10110d042 100644 --- a/plugins/tangle/approvers.go +++ b/plugins/tangle/approvers.go @@ -5,7 +5,6 @@ import ( "github.com/iotaledger/goshimmer/packages/datastructure" "github.com/iotaledger/goshimmer/packages/errors" "github.com/iotaledger/goshimmer/packages/model/approvers" - "github.com/iotaledger/hive.go/node" "github.com/iotaledger/hive.go/typeutils" "github.com/iotaledger/iota.go/trinary" ) @@ -75,7 +74,7 @@ const ( var approversDatabase database.Database -func configureApproversDatabase(plugin *node.Plugin) { +func configureApproversDatabase() { if db, err := database.Get("approvers"); err != nil { panic(err) } else { diff --git a/plugins/tangle/bundle.go b/plugins/tangle/bundle.go index bd55c6e67e0cfd8eb22cc3a02d75fc142b4ac93c..fa607ba127fd374028bff25259ef55c92c9d96a5 100644 --- a/plugins/tangle/bundle.go +++ b/plugins/tangle/bundle.go @@ -5,7 +5,6 @@ import ( "github.com/iotaledger/goshimmer/packages/datastructure" "github.com/iotaledger/goshimmer/packages/errors" "github.com/iotaledger/goshimmer/packages/model/bundle" - "github.com/iotaledger/hive.go/node" "github.com/iotaledger/hive.go/typeutils" "github.com/iotaledger/iota.go/trinary" ) @@ -79,7 +78,7 @@ const ( var bundleDatabase database.Database -func configureBundleDatabase(plugin *node.Plugin) { +func configureBundleDatabase() { if db, err := database.Get("bundle"); err != nil { panic(err) } else { diff --git a/plugins/tangle/plugin.go b/plugins/tangle/plugin.go index 020480129d218141b376e2815c91a6cc41e80bdf..6684986c5514af244f8907153b3f64dc45e3e772 100644 --- a/plugins/tangle/plugin.go +++ b/plugins/tangle/plugin.go @@ -10,17 +10,18 @@ import ( var PLUGIN = node.NewPlugin("Tangle", node.Enabled, configure, run) var log *logger.Logger -func configure(plugin *node.Plugin) { +func configure(*node.Plugin) { log = logger.NewLogger("Tangle") - configureTransactionDatabase(plugin) - configureTransactionMetaDataDatabase(plugin) - configureApproversDatabase(plugin) - configureBundleDatabase(plugin) - configureSolidifier(plugin) + + configureTransactionDatabase() + configureTransactionMetaDataDatabase() + configureApproversDatabase() + configureBundleDatabase() + configureSolidifier() } -func run(plugin *node.Plugin) { - runSolidifier(plugin) +func run(*node.Plugin) { + runSolidifier() } // endregion /////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/plugins/tangle/solidifier.go b/plugins/tangle/solidifier.go index 696bd3d03b7b6ed6c31da36c13f776e1c2427fad..e30ae82e9a95e89b9fbcb164212fd7e27e5bdefa 100644 --- a/plugins/tangle/solidifier.go +++ b/plugins/tangle/solidifier.go @@ -13,7 +13,6 @@ import ( "github.com/iotaledger/goshimmer/packages/workerpool" "github.com/iotaledger/hive.go/daemon" "github.com/iotaledger/hive.go/events" - "github.com/iotaledger/hive.go/node" "github.com/iotaledger/iota.go/trinary" ) @@ -26,9 +25,9 @@ var ( unsolidTxs *UnsolidTxs ) -func configureSolidifier(plugin *node.Plugin) { +func configureSolidifier() { workerPool = workerpool.New(func(task workerpool.Task) { - processMetaTransaction(plugin, task.Param(0).(*meta_transaction.MetaTransaction)) + processMetaTransaction(task.Param(0).(*meta_transaction.MetaTransaction)) task.Return(nil) }, workerpool.WorkerCount(WORKER_COUNT), workerpool.QueueSize(10000)) @@ -46,7 +45,7 @@ func configureSolidifier(plugin *node.Plugin) { })) } -func runSolidifier(plugin *node.Plugin) { +func runSolidifier() { log.Info("Starting Solidifier ...") daemon.BackgroundWorker("Tangle Solidifier", func(shutdownSignal <-chan struct{}) { @@ -54,7 +53,7 @@ func runSolidifier(plugin *node.Plugin) { workerPool.Start() <-shutdownSignal log.Info("Stopping Solidifier ...") - workerPool.Stop() + workerPool.StopAndWait() log.Info("Stopping Solidifier ... done") }) } @@ -169,7 +168,7 @@ func propagateSolidity(transactionHash trinary.Trytes) errors.IdentifiableError return nil } -func processMetaTransaction(plugin *node.Plugin, metaTransaction *meta_transaction.MetaTransaction) { +func processMetaTransaction(metaTransaction *meta_transaction.MetaTransaction) { var newTransaction bool if tx, err := GetTransaction(metaTransaction.GetHash(), func(transactionHash trinary.Trytes) *value_transaction.ValueTransaction { newTransaction = true @@ -179,11 +178,11 @@ func processMetaTransaction(plugin *node.Plugin, metaTransaction *meta_transacti log.Errorf("Unable to load transaction %s: %s", metaTransaction.GetHash(), err.Error()) } else if newTransaction { updateUnsolidTxs(tx) - processTransaction(plugin, tx) + processTransaction(tx) } } -func processTransaction(plugin *node.Plugin, transaction *value_transaction.ValueTransaction) { +func processTransaction(transaction *value_transaction.ValueTransaction) { Events.TransactionStored.Trigger(transaction) transactionHash := transaction.GetHash() diff --git a/plugins/tangle/transaction.go b/plugins/tangle/transaction.go index aeb4c915affcddfbbae05a7c6594edccb96db7bf..31edfc4f8c478aa4dd927e226c719ad3dfc53699 100644 --- a/plugins/tangle/transaction.go +++ b/plugins/tangle/transaction.go @@ -5,7 +5,6 @@ import ( "github.com/iotaledger/goshimmer/packages/datastructure" "github.com/iotaledger/goshimmer/packages/errors" "github.com/iotaledger/goshimmer/packages/model/value_transaction" - "github.com/iotaledger/hive.go/node" "github.com/iotaledger/hive.go/typeutils" "github.com/iotaledger/iota.go/trinary" ) @@ -76,7 +75,7 @@ const ( var transactionDatabase database.Database -func configureTransactionDatabase(plugin *node.Plugin) { +func configureTransactionDatabase() { if db, err := database.Get("transaction"); err != nil { panic(err) } else { diff --git a/plugins/tangle/transaction_metadata.go b/plugins/tangle/transaction_metadata.go index e1032ed635b284814109bd0f1a4bcf86f3208635..6713ecc8b006496044a3c85e85d2e4a6a5124729 100644 --- a/plugins/tangle/transaction_metadata.go +++ b/plugins/tangle/transaction_metadata.go @@ -5,7 +5,6 @@ import ( "github.com/iotaledger/goshimmer/packages/datastructure" "github.com/iotaledger/goshimmer/packages/errors" "github.com/iotaledger/goshimmer/packages/model/transactionmetadata" - "github.com/iotaledger/hive.go/node" "github.com/iotaledger/hive.go/typeutils" "github.com/iotaledger/iota.go/trinary" ) @@ -76,7 +75,7 @@ const ( var transactionMetadataDatabase database.Database -func configureTransactionMetaDataDatabase(plugin *node.Plugin) { +func configureTransactionMetaDataDatabase() { if db, err := database.Get("transactionMetadata"); err != nil { panic(err) } else {