public void TestUnconfTxMissingPrevOutput()
{
// create tx spending a previous output that doesn't exist
var decodedTx = Transaction.Create(
0,
ImmutableArray.Create(new TxInput(UInt256.One, 0, ImmutableArray<byte>.Empty, 0)),
ImmutableArray.Create(new TxOutput(0, ImmutableArray<byte>.Empty)),
0);
var tx = decodedTx.Transaction;
// mock empty chain state
var chainState = new Mock<IChainState>();
// mock core daemon for chain state retrieval
var coreDaemon = new Mock<ICoreDaemon>();
coreDaemon.Setup(x => x.GetChainState()).Returns(chainState.Object);
using (var unconfirmedTxesBuilder = new UnconfirmedTxesBuilder(coreDaemon.Object, Mock.Of<ICoreStorage>(), storageManager))
{
// try to add the tx
Assert.IsFalse(unconfirmedTxesBuilder.TryAddTransaction(decodedTx));
// verify unconfirmed tx was not added
UnconfirmedTx unconfirmedTx;
Assert.IsFalse(unconfirmedTxesBuilder.TryGetTransaction(tx.Hash, out unconfirmedTx));
Assert.IsNull(unconfirmedTx);
// verify tx is not indexed against its input
Assert.AreEqual(0, unconfirmedTxesBuilder.GetTransactionsSpending(tx.Inputs[0].PrevTxOutputKey).Count);
}
}