Skip to content
Snippets Groups Projects
Select Git revision
  • c224226125b939edd6ef8eb7ecf3ccc63a0cdde8
  • without_tipselection default
  • develop protected
  • fix/grafana-local-dashboard
  • wasp
  • fix/dashboard-explorer-freeze
  • master
  • feat/timerqueue
  • test/sync_debug_and_650
  • feat/sync_revamp_inv
  • wip/sync
  • tool/db-recovery
  • portcheck/fix
  • fix/synchronization
  • feat/new-dashboard-analysis
  • feat/refactored-analysis-dashboard
  • feat/new-analysis-dashboard
  • test/demo-prometheus-fpc
  • prometheus_metrics
  • wip/analysis-server
  • merge/fpc-test-value-transfer
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.3
  • v0.1.2
  • v0.1.1
  • v0.1.0
28 results

plugin.go

Blame
  • tangle_test.go 52.90 KiB
    package tangle
    
    import (
    	"container/list"
    	"math"
    	"testing"
    
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address"
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/balance"
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/branchmanager"
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/payload"
    	"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/transaction"
    	"github.com/iotaledger/hive.go/kvstore/mapdb"
    	"github.com/iotaledger/hive.go/types"
    	"github.com/stretchr/testify/assert"
    	"github.com/stretchr/testify/mock"
    	"github.com/stretchr/testify/require"
    )
    
    func TestSetTransactionPreferred(t *testing.T) {
    	tangle := New(mapdb.NewMapDB())
    	event := newEventTangle(t, tangle)
    	defer event.DetachAll()
    
    	tx := createDummyTransaction()
    	valueObject := payload.New(payload.GenesisID, payload.GenesisID, tx)
    	tangle.storeTransactionModels(valueObject)
    
    	event.Expect("TransactionPreferred", tx, mock.Anything)
    
    	modified, err := tangle.SetTransactionPreferred(tx.ID(), true)
    	require.NoError(t, err)
    	assert.True(t, modified)
    
    	event.AssertExpectations(t)
    }
    
    // TestBookTransaction tests the following cases:
    // - missing output
    // - transaction already booked by another process
    // - booking first spend
    // - booking double spend
    func TestBookTransaction(t *testing.T) {
    
    	// CASE: missing output
    	t.Run("CASE: missing output", func(t *testing.T) {
    		tangle := New(mapdb.NewMapDB())
    		event := newEventTangle(t, tangle)
    		defer event.DetachAll()
    
    		tx := createDummyTransaction()
    		valueObject := payload.New(payload.GenesisID, payload.GenesisID, tx)
    
    		cachedTransaction, cachedTransactionMetadata, _, transactionIsNew := tangle.storeTransactionModels(valueObject)
    		assert.True(t, transactionIsNew)
    
    		event.Expect("TransactionSolid", tx, mock.Anything)
    
    		// manually trigger a booking: tx will be marked solid, but it cannot be book as its inputs are unavailable
    		transactionBooked, decisionPending, err := tangle.bookTransaction(cachedTransaction, cachedTransactionMetadata)
    		assert.False(t, transactionBooked)
    		assert.False(t, decisionPending)
    		assert.Error(t, err)
    
    		event.AssertExpectations(t)
    	})
    
    	// CASE: transaction already booked by another process
    	t.Run("CASE: transaction already booked by another process", func(t *testing.T) {
    		tangle := New(mapdb.NewMapDB())