Skip to content
Snippets Groups Projects
Unverified Commit 9c8fbb9c authored by Luca Moser's avatar Luca Moser
Browse files

Merge branch 'tests/tangle' into integration/value

parents d7a99aa0 7bc9720b
No related branches found
No related tags found
No related merge requests found
......@@ -391,6 +391,11 @@ func (branchManager *BranchManager) setBranchFinalized(cachedBranch *CachedBranc
branchManager.Events.BranchFinalized.Trigger(cachedBranch)
// propagate finalized to aggregated child branches
if err = branchManager.propagateFinalizedToAggregatedChildBranches(cachedBranch.Retain()); err != nil {
return
}
if !branch.Preferred() {
branchManager.propagateRejectedToChildBranches(cachedBranch.Retain())
......@@ -416,11 +421,6 @@ func (branchManager *BranchManager) setBranchFinalized(cachedBranch *CachedBranc
})
}
// propagate finalized to aggregated child branches
if err = branchManager.propagateFinalizedToAggregatedChildBranches(cachedBranch.Retain()); err != nil {
return
}
// schedule confirmed checks of children
err = branchManager.propagateConfirmedToChildBranches(cachedBranch.Retain())
......
......@@ -83,7 +83,7 @@ func newEvents() *Events {
PayloadInvalid: events.NewEvent(cachedPayloadErrorEvent),
PayloadUnsolidifiable: events.NewEvent(payloadIDEvent),
TransactionReceived: events.NewEvent(cachedTransactionAttachmentEvent),
TransactionInvalid: events.NewEvent(cachedTransactionEvent),
TransactionInvalid: events.NewEvent(cachedTransactionErrorEvent),
TransactionSolid: events.NewEvent(cachedTransactionEvent),
TransactionBooked: events.NewEvent(transactionBookedEvent),
TransactionPreferred: events.NewEvent(cachedTransactionEvent),
......@@ -141,6 +141,14 @@ func cachedTransactionEvent(handler interface{}, params ...interface{}) {
)
}
func cachedTransactionErrorEvent(handler interface{}, params ...interface{}) {
handler.(func(*transaction.CachedTransaction, *CachedTransactionMetadata, error))(
params[0].(*transaction.CachedTransaction).Retain(),
params[1].(*CachedTransactionMetadata).Retain(),
params[2].(error),
)
}
func cachedTransactionAttachmentEvent(handler interface{}, params ...interface{}) {
handler.(func(*transaction.CachedTransaction, *CachedTransactionMetadata, *CachedAttachment))(
params[0].(*transaction.CachedTransaction).Retain(),
......
dapps/valuetransfers/packages/tangle/imgs/scenario1.png

184 KiB

dapps/valuetransfers/packages/tangle/imgs/scenario2.png

361 KiB

......@@ -50,15 +50,15 @@ func New(store kvstore.KVStore) (tangle *Tangle) {
tangle = &Tangle{
branchManager: branchmanager.New(store),
payloadStorage: osFactory.New(osPayload, osPayloadFactory, objectstorage.CacheTime(time.Second)),
payloadMetadataStorage: osFactory.New(osPayloadMetadata, osPayloadMetadataFactory, objectstorage.CacheTime(time.Second)),
missingPayloadStorage: osFactory.New(osMissingPayload, osMissingPayloadFactory, objectstorage.CacheTime(time.Second)),
approverStorage: osFactory.New(osApprover, osPayloadApproverFactory, objectstorage.CacheTime(time.Second), objectstorage.PartitionKey(payload.IDLength, payload.IDLength), objectstorage.KeysOnly(true)),
transactionStorage: osFactory.New(osTransaction, osTransactionFactory, objectstorage.CacheTime(time.Second), osLeakDetectionOption),
transactionMetadataStorage: osFactory.New(osTransactionMetadata, osTransactionMetadataFactory, objectstorage.CacheTime(time.Second), osLeakDetectionOption),
attachmentStorage: osFactory.New(osAttachment, osAttachmentFactory, objectstorage.CacheTime(time.Second), objectstorage.PartitionKey(transaction.IDLength, payload.IDLength), osLeakDetectionOption),
outputStorage: osFactory.New(osOutput, osOutputFactory, OutputKeyPartitions, objectstorage.CacheTime(time.Second), osLeakDetectionOption),
consumerStorage: osFactory.New(osConsumer, osConsumerFactory, ConsumerPartitionKeys, objectstorage.CacheTime(time.Second), osLeakDetectionOption),
payloadStorage: osFactory.New(osPayload, osPayloadFactory, objectstorage.CacheTime(1*time.Second)),
payloadMetadataStorage: osFactory.New(osPayloadMetadata, osPayloadMetadataFactory, objectstorage.CacheTime(1*time.Second)),
missingPayloadStorage: osFactory.New(osMissingPayload, osMissingPayloadFactory, objectstorage.CacheTime(1*time.Second)),
approverStorage: osFactory.New(osApprover, osPayloadApproverFactory, objectstorage.CacheTime(1*time.Second), objectstorage.PartitionKey(payload.IDLength, payload.IDLength), objectstorage.KeysOnly(true)),
transactionStorage: osFactory.New(osTransaction, osTransactionFactory, objectstorage.CacheTime(1*time.Second), osLeakDetectionOption),
transactionMetadataStorage: osFactory.New(osTransactionMetadata, osTransactionMetadataFactory, objectstorage.CacheTime(1*time.Second), osLeakDetectionOption),
attachmentStorage: osFactory.New(osAttachment, osAttachmentFactory, objectstorage.CacheTime(1*time.Second), objectstorage.PartitionKey(transaction.IDLength, payload.IDLength), osLeakDetectionOption),
outputStorage: osFactory.New(osOutput, osOutputFactory, OutputKeyPartitions, objectstorage.CacheTime(1*time.Second), osLeakDetectionOption),
consumerStorage: osFactory.New(osConsumer, osConsumerFactory, ConsumerPartitionKeys, objectstorage.CacheTime(1*time.Second), osLeakDetectionOption),
Events: *newEvents(),
}
......@@ -1140,7 +1140,7 @@ func (tangle *Tangle) processSolidificationStackEntry(solidificationStack *list.
// abort if the transaction is not solid or invalid
transactionSolid, consumedBranches, transactionSolidityErr := tangle.checkTransactionSolidity(currentTransaction, currentTransactionMetadata)
if transactionSolidityErr != nil {
tangle.Events.TransactionInvalid.Trigger(solidificationStackEntry.CachedTransaction, solidificationStackEntry.CachedTransactionMetadata)
tangle.Events.TransactionInvalid.Trigger(solidificationStackEntry.CachedTransaction, solidificationStackEntry.CachedTransactionMetadata, transactionSolidityErr)
tangle.deleteTransactionFutureCone(currentTransaction.ID())
......@@ -1151,7 +1151,7 @@ func (tangle *Tangle) processSolidificationStackEntry(solidificationStack *list.
}
// abort if the payload is not solid or invalid
payloadSolid, payloadSolidityErr := tangle.checkPayloadSolidity(currentPayload, currentPayloadMetadata, consumedBranches)
payloadSolid, payloadSolidityErr := tangle.payloadBecameNewlySolid(currentPayload, currentPayloadMetadata, consumedBranches)
if payloadSolidityErr != nil {
tangle.Events.PayloadInvalid.Trigger(solidificationStackEntry.CachedPayload, solidificationStackEntry.CachedPayloadMetadata, payloadSolidityErr)
......@@ -1336,6 +1336,14 @@ func (tangle *Tangle) bookPayload(cachedPayload *payload.CachedPayload, cachedPa
return
}
branchBranchID := tangle.payloadBranchID(valueObject.BranchID())
trunkBranchID := tangle.payloadBranchID(valueObject.TrunkID())
transactionBranchID := transactionMetadata.BranchID()
if branchBranchID == branchmanager.UndefinedBranchID || trunkBranchID == branchmanager.UndefinedBranchID || transactionBranchID == branchmanager.UndefinedBranchID {
return
}
// abort if the payload has been marked as solid before
if !valueObjectMetadata.setSolid(true) {
return
......@@ -1344,16 +1352,6 @@ func (tangle *Tangle) bookPayload(cachedPayload *payload.CachedPayload, cachedPa
// trigger event if payload became solid
tangle.Events.PayloadSolid.Trigger(cachedPayload, cachedPayloadMetadata)
branchBranchID := tangle.payloadBranchID(valueObject.BranchID())
trunkBranchID := tangle.payloadBranchID(valueObject.TrunkID())
transactionBranchID := transactionMetadata.BranchID()
if branchBranchID == branchmanager.UndefinedBranchID ||
trunkBranchID == branchmanager.UndefinedBranchID ||
transactionBranchID == branchmanager.UndefinedBranchID {
return
}
cachedAggregatedBranch, err := tangle.BranchManager().AggregateBranches([]branchmanager.BranchID{branchBranchID, trunkBranchID, transactionBranchID}...)
if err != nil {
return
......@@ -1396,35 +1394,28 @@ func (tangle *Tangle) payloadBranchID(payloadID payload.ID) branchmanager.Branch
return payloadMetadata.BranchID()
}
// checkPayloadSolidity returns true if the given payload is solid. A payload is considered to be solid, if it is either
// already marked as solid or if its referenced payloads are marked as solid.
func (tangle *Tangle) checkPayloadSolidity(p *payload.Payload, payloadMetadata *PayloadMetadata, transactionBranches []branchmanager.BranchID) (solid bool, err error) {
// payloadBecameNewlySolid returns true if the given payload is solid but was not marked as solid. yet.
func (tangle *Tangle) payloadBecameNewlySolid(p *payload.Payload, payloadMetadata *PayloadMetadata, transactionBranches []branchmanager.BranchID) (solid bool, err error) {
// abort if the payload was deleted
if p == nil || p.IsDeleted() || payloadMetadata == nil || payloadMetadata.IsDeleted() {
return
}
if solid = payloadMetadata.IsSolid(); solid {
// abort if the payload was marked as solid already
if payloadMetadata.IsSolid() {
return
}
combinedBranches := transactionBranches
trunkBranchID := tangle.payloadBranchID(p.TrunkID())
tangle.PayloadMetadata(p.TrunkID()).Consume(func(metadata *PayloadMetadata) { solid = metadata.IsSolid() })
if p.TrunkID() == payload.GenesisID {
solid = true
}
if trunkBranchID == branchmanager.UndefinedBranchID || !solid {
if trunkBranchID == branchmanager.UndefinedBranchID {
return false, nil
}
combinedBranches = append(combinedBranches, trunkBranchID)
branchBranchID := tangle.payloadBranchID(p.BranchID())
tangle.PayloadMetadata(p.BranchID()).Consume(func(metadata *PayloadMetadata) { solid = metadata.IsSolid() })
if p.BranchID() == payload.GenesisID {
solid = true
}
if branchBranchID == branchmanager.UndefinedBranchID || !solid {
if branchBranchID == branchmanager.UndefinedBranchID {
return false, nil
}
combinedBranches = append(combinedBranches, branchBranchID)
......@@ -1451,8 +1442,10 @@ func (tangle *Tangle) checkTransactionSolidity(tx *transaction.Transaction, meta
}
// abort if we have previously determined the solidity status of the transaction already
if solid = metadata.Solid(); solid {
if metadata.Solid() {
if solid = metadata.BranchID() != branchmanager.UndefinedBranchID; solid {
consumedBranches = []branchmanager.BranchID{metadata.BranchID()}
}
return
}
......
......@@ -4,14 +4,16 @@ import (
"sync"
"testing"
"github.com/iotaledger/hive.go/kvstore/mapdb"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"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/tipmanager"
"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/transaction"
"github.com/iotaledger/hive.go/kvstore/mapdb"
"github.com/stretchr/testify/assert"
)
func TestConcurrency(t *testing.T) {
......@@ -211,18 +213,22 @@ func TestReverseValueObjectSolidification(t *testing.T) {
}
func TestReverseTransactionSolidification(t *testing.T) {
testIterations := 500
// repeat the test a few times
for k := 0; k < testIterations; k++ {
// img/reverse-transaction-solidification.png
// Builds a UTXO-DAG with `txChains` spending outputs from the corresponding chain.
// All value objects reference the previous value object, effectively creating a chain.
// The test attaches the prepared value objects concurrently in reverse order.
tangle := New(mapdb.NewMapDB())
defer tangle.Shutdown()
tipManager := tipmanager.New()
txChains := 5
count := 100
threads := 10
txChains := 2
count := 10
threads := 5
countTotal := txChains * threads * count
// initialize tangle with genesis block
......@@ -297,35 +303,36 @@ func TestReverseTransactionSolidification(t *testing.T) {
// verify correctness
for i := 0; i < countTotal; i++ {
// check if transaction metadata is found in database
assert.True(t, tangle.TransactionMetadata(transactions[i].ID()).Consume(func(transactionMetadata *TransactionMetadata) {
assert.Truef(t, transactionMetadata.Solid(), "the transaction %s is not solid", transactions[i].ID().String())
assert.Equalf(t, branchmanager.MasterBranchID, transactionMetadata.BranchID(), "the transaction was booked into the wrong branch")
}))
require.Truef(t, tangle.TransactionMetadata(transactions[i].ID()).Consume(func(transactionMetadata *TransactionMetadata) {
require.Truef(t, transactionMetadata.Solid(), "the transaction %s is not solid", transactions[i].ID().String())
require.Equalf(t, branchmanager.MasterBranchID, transactionMetadata.BranchID(), "the transaction was booked into the wrong branch")
}), "transaction metadata %s not found in database", transactions[i].ID())
// check if payload metadata is found in database
assert.True(t, tangle.PayloadMetadata(valueObjects[i].ID()).Consume(func(payloadMetadata *PayloadMetadata) {
assert.Truef(t, payloadMetadata.IsSolid(), "the payload is not solid")
assert.Equalf(t, branchmanager.MasterBranchID, payloadMetadata.BranchID(), "the payload was booked into the wrong branch")
}))
// check if value object metadata is found in database
require.Truef(t, tangle.PayloadMetadata(valueObjects[i].ID()).Consume(func(payloadMetadata *PayloadMetadata) {
require.Truef(t, payloadMetadata.IsSolid(), "the payload %s is not solid", valueObjects[i].ID())
require.Equalf(t, branchmanager.MasterBranchID, payloadMetadata.BranchID(), "the payload was booked into the wrong branch")
}), "value object metadata %s not found in database", valueObjects[i].ID())
// check if outputs are found in database
transactions[i].Outputs().ForEach(func(address address.Address, balances []*balance.Balance) bool {
cachedOutput := tangle.TransactionOutput(transaction.NewOutputID(address, transactions[i].ID()))
assert.True(t, cachedOutput.Consume(func(output *Output) {
require.Truef(t, cachedOutput.Consume(func(output *Output) {
// only the last outputs in chain should not be spent
if i+txChains >= countTotal {
assert.Equalf(t, 0, output.ConsumerCount(), "the output should not be spent")
require.Equalf(t, 0, output.ConsumerCount(), "the output should not be spent")
} else {
assert.Equalf(t, 1, output.ConsumerCount(), "the output should be spent")
require.Equalf(t, 1, output.ConsumerCount(), "the output should be spent")
}
assert.Equal(t, []*balance.Balance{balance.New(balance.ColorIOTA, 1)}, output.Balances())
assert.Equalf(t, branchmanager.MasterBranchID, output.BranchID(), "the output was booked into the wrong branch")
assert.Truef(t, output.Solid(), "the output is not solid")
}))
require.Equal(t, []*balance.Balance{balance.New(balance.ColorIOTA, 1)}, output.Balances())
require.Equalf(t, branchmanager.MasterBranchID, output.BranchID(), "the output was booked into the wrong branch")
require.Truef(t, output.Solid(), "the output is not solid")
}), "output not found in database for tx %s", transactions[i])
return true
})
}
}
}
func getTxOutputsAsInputs(tx *transaction.Transaction) *transaction.Inputs {
outputIDs := make([]transaction.OutputID, 0)
......
......@@ -30,8 +30,9 @@ const (
Y
)
// TODO: clean up create scenario
// TODO: clean up create scenario with some helper functions: DRY!
// preparePropagationScenario1 creates a tangle according to `img/scenario1.png`.
func preparePropagationScenario1(t *testing.T) (*Tangle, map[string]*transaction.Transaction, map[string]*payload.Payload, map[string]branchmanager.BranchID, *wallet.Seed) {
// create tangle
tangle := New(mapdb.NewMapDB())
......@@ -496,6 +497,7 @@ func preparePropagationScenario1(t *testing.T) (*Tangle, map[string]*transaction
return tangle, transactions, valueObjects, branches, seed
}
// preparePropagationScenario1 creates a tangle according to `img/scenario2.png`.
func preparePropagationScenario2(t *testing.T) (*Tangle, map[string]*transaction.Transaction, map[string]*payload.Payload, map[string]branchmanager.BranchID, *wallet.Seed) {
tangle, transactions, valueObjects, branches, seed := preparePropagationScenario1(t)
......@@ -729,6 +731,8 @@ func preparePropagationScenario2(t *testing.T) (*Tangle, map[string]*transaction
}
func TestPropagationScenario1(t *testing.T) {
// img/scenario1.png
// test past cone monotonicity - all value objects MUST be confirmed
{
tangle, transactions, valueObjects, _, _ := preparePropagationScenario1(t)
......@@ -892,6 +896,7 @@ func TestPropagationScenario1(t *testing.T) {
}
func TestPropagationScenario2(t *testing.T) {
// img/scenario2.png
tangle, transactions, valueObjects, branches, _ := preparePropagationScenario2(t)
// initialize debugger for this test
......@@ -958,13 +963,15 @@ func TestPropagationScenario2(t *testing.T) {
setTransactionPreferredWithCheck(t, tangle, transactions["[-C, H+]"], true)
setTransactionFinalizedWithCheck(t, tangle, transactions["[-C, H+]"])
verifyBranchState(t, tangle, branches["AC"], true, true, true, false)
verifyInclusionState(t, tangle, valueObjects["[-C, H+]"], true, true, true, true, false)
verifyBranchState(t, tangle, branches["C"], true, true, true, false)
verifyBranchState(t, tangle, branches["AC"], true, true, true, false)
verifyInclusionState(t, tangle, valueObjects["[-B, -C, E+]"], false, true, false, false, true)
verifyBranchState(t, tangle, branches["D"], true, false, false, true)
verifyInclusionState(t, tangle, valueObjects["[-B, -C, E+] (Reattachment)"], false, true, false, false, true)
verifyBranchState(t, tangle, branches["BD"], true, false, false, true)
// TODO: BD is not finalized
// [-H, -D, I+] should now be liked
verifyInclusionState(t, tangle, valueObjects["[-H, -D, I+]"], true, false, true, false, false)
......@@ -978,8 +985,10 @@ func TestPropagationScenario2(t *testing.T) {
setTransactionFinalizedWithCheck(t, tangle, transactions["[-B, J+]"])
verifyInclusionState(t, tangle, valueObjects["[-B, J+]"], true, true, true, true, false)
verifyBranchState(t, tangle, branches["E"], true, true, true, false)
verifyBranchState(t, tangle, branches["ACE"], true, true, true, false)
}
// verifyBranchState verifies the the branch state according to the given parameters.
func verifyBranchState(t *testing.T, tangle *Tangle, id branchmanager.BranchID, finalized, liked, confirmed, rejected bool) {
assert.True(t, tangle.branchManager.Branch(id).Consume(func(branch *branchmanager.Branch) {
assert.Equalf(t, finalized, branch.Finalized(), "branch finalized state does not match")
......@@ -989,6 +998,8 @@ func verifyBranchState(t *testing.T, tangle *Tangle, id branchmanager.BranchID,
assert.Equalf(t, rejected, branch.Rejected(), "branch rejected state does not match")
}))
}
// verifyInclusionState verifies the inclusion state of outputs and transaction according to the given parameters.
func verifyTransactionInclusionState(t *testing.T, tangle *Tangle, valueObject *payload.Payload, preferred, finalized, liked, confirmed, rejected bool) {
tx := valueObject.Transaction()
......@@ -1013,6 +1024,7 @@ func verifyTransactionInclusionState(t *testing.T, tangle *Tangle, valueObject *
}))
}
// verifyValueObjectInclusionState verifies the inclusion state of a value object according to the given parameters.
func verifyValueObjectInclusionState(t *testing.T, tangle *Tangle, valueObject *payload.Payload, liked, confirmed, rejected bool) {
assert.True(t, tangle.PayloadMetadata(valueObject.ID()).Consume(func(payloadMetadata *PayloadMetadata) {
assert.Equalf(t, liked, payloadMetadata.Liked(), "value object liked state does not match")
......@@ -1021,16 +1033,20 @@ func verifyValueObjectInclusionState(t *testing.T, tangle *Tangle, valueObject *
}))
}
// verifyInclusionState verifies the inclusion state of outputs, transaction and value object according to the given parameters.
func verifyInclusionState(t *testing.T, tangle *Tangle, valueObject *payload.Payload, preferred, finalized, liked, confirmed, rejected bool) {
verifyTransactionInclusionState(t, tangle, valueObject, preferred, finalized, liked, confirmed, rejected)
verifyValueObjectInclusionState(t, tangle, valueObject, liked, confirmed, rejected)
}
// setTransactionPreferredWithCheck sets the transaction to preferred and makes sure that no error occurred and it's modified.
func setTransactionPreferredWithCheck(t *testing.T, tangle *Tangle, tx *transaction.Transaction, preferred bool) {
modified, err := tangle.SetTransactionPreferred(tx.ID(), preferred)
require.NoError(t, err)
assert.True(t, modified)
}
// setTransactionFinalizedWithCheck sets the transaction to finalized and makes sure that no error occurred and it's modified.
func setTransactionFinalizedWithCheck(t *testing.T, tangle *Tangle, tx *transaction.Transaction) {
modified, err := tangle.SetTransactionFinalized(tx.ID())
require.NoError(t, err)
......
......@@ -31,15 +31,6 @@ func TestSetTransactionPreferred(t *testing.T) {
assert.True(t, modified)
}
func TestPropagateValuePayloadLikeUpdates(t *testing.T) {
}
//TODO: missing propagateValuePayloadConfirmedUpdates (not yet implemented)
func TestSetTransactionFinalized(t *testing.T) {
}
// TestBookTransaction tests the following cases:
// - missing output
// - transaction already booked by another process
......@@ -491,7 +482,7 @@ func TestStoreTransactionModels(t *testing.T) {
})
// check created consumers
// TODO: only reason that there could be multiple consumers = conflict, e.g. 2 tx use same inputs?
// only reason that there could be multiple consumers = conflict, e.g. 2 tx use same inputs?
tx.Inputs().ForEach(func(inputId transaction.OutputID) bool {
expectedConsumer := NewConsumer(inputId, tx.ID())
tangle.Consumers(inputId).Consume(func(consumer *Consumer) {
......@@ -1228,8 +1219,8 @@ func TestCheckPayloadSolidity(t *testing.T) {
metadata.SetBranchID(branchmanager.MasterBranchID)
transactionBranches := []branchmanager.BranchID{branchmanager.MasterBranchID}
solid, err := tangle.checkPayloadSolidity(valueObject, metadata, transactionBranches)
assert.True(t, solid)
solid, err := tangle.payloadBecameNewlySolid(valueObject, metadata, transactionBranches)
assert.False(t, solid)
assert.NoError(t, err)
}
......@@ -1239,7 +1230,7 @@ func TestCheckPayloadSolidity(t *testing.T) {
metadata := NewPayloadMetadata(valueObject.ID())
transactionBranches := []branchmanager.BranchID{branchmanager.MasterBranchID}
solid, err := tangle.checkPayloadSolidity(valueObject, metadata, transactionBranches)
solid, err := tangle.payloadBecameNewlySolid(valueObject, metadata, transactionBranches)
assert.True(t, solid)
assert.NoError(t, err)
}
......@@ -1255,7 +1246,7 @@ func TestCheckPayloadSolidity(t *testing.T) {
metadata := NewPayloadMetadata(valueObject.ID())
transactionBranches := []branchmanager.BranchID{branchmanager.MasterBranchID}
solid, err := tangle.checkPayloadSolidity(valueObject, metadata, transactionBranches)
solid, err := tangle.payloadBecameNewlySolid(valueObject, metadata, transactionBranches)
assert.True(t, solid)
assert.NoError(t, err)
}
......@@ -1270,22 +1261,7 @@ func TestCheckPayloadSolidity(t *testing.T) {
metadata := NewPayloadMetadata(valueObject.ID())
transactionBranches := []branchmanager.BranchID{branchmanager.MasterBranchID}
solid, err := tangle.checkPayloadSolidity(valueObject, metadata, transactionBranches)
assert.False(t, solid)
assert.NoError(t, err)
}
// check with non-solid parents but branch set -> should not be solid
{
setParent := func(payloadMetadata *PayloadMetadata) {
payloadMetadata.SetBranchID(branchmanager.MasterBranchID)
}
valueObject := payload.New(storeParentPayloadWithMetadataFunc(t, tangle, setParent), storeParentPayloadWithMetadataFunc(t, tangle, setParent), createDummyTransaction())
metadata := NewPayloadMetadata(valueObject.ID())
transactionBranches := []branchmanager.BranchID{branchmanager.MasterBranchID}
solid, err := tangle.checkPayloadSolidity(valueObject, metadata, transactionBranches)
solid, err := tangle.payloadBecameNewlySolid(valueObject, metadata, transactionBranches)
assert.False(t, solid)
assert.NoError(t, err)
}
......@@ -1310,7 +1286,7 @@ func TestCheckPayloadSolidity(t *testing.T) {
metadata := NewPayloadMetadata(valueObject.ID())
transactionBranches := []branchmanager.BranchID{branchmanager.MasterBranchID}
solid, err := tangle.checkPayloadSolidity(valueObject, metadata, transactionBranches)
solid, err := tangle.payloadBecameNewlySolid(valueObject, metadata, transactionBranches)
assert.False(t, solid)
assert.Error(t, err)
}
......@@ -1335,7 +1311,7 @@ func TestCheckPayloadSolidity(t *testing.T) {
metadata := NewPayloadMetadata(valueObject.ID())
transactionBranches := []branchmanager.BranchID{{2}}
solid, err := tangle.checkPayloadSolidity(valueObject, metadata, transactionBranches)
solid, err := tangle.payloadBecameNewlySolid(valueObject, metadata, transactionBranches)
assert.False(t, solid)
assert.Error(t, err)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment