Skip to content

Commit

Permalink
fix: consensus message submit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
janaakhterov committed Jul 16, 2020
1 parent c1a79a9 commit 831c636
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 23 deletions.
64 changes: 44 additions & 20 deletions consensus_message_submit_transaction.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package hedera

import (
"fmt"
"time"

"github.com/hashgraph/hedera-sdk-go/proto"
Expand Down Expand Up @@ -28,7 +29,7 @@ func NewConsensusMessageSubmitTransaction() ConsensusMessageSubmitTransaction {
inner := newTransactionBuilder()
inner.pb.Data = &proto.TransactionBody_ConsensusSubmitMessage{pb}

builder := ConsensusMessageSubmitTransaction{inner, pb, 0, nil, ConsensusTopicID{}, TransactionID{}, 0, 0, false}
builder := ConsensusMessageSubmitTransaction{inner, pb, 10, nil, ConsensusTopicID{}, TransactionID{}, 0, 0, false}

return builder
}
Expand Down Expand Up @@ -61,9 +62,20 @@ func (builder ConsensusMessageSubmitTransaction) SetChunkInfo(transactionID Tran
}

func (builder ConsensusMessageSubmitTransaction) Build(client *Client) (TransactionList, error) {
var transactionID TransactionID
if builder.TransactionBuilder.pb.TransactionID != nil {
transactionID = transactionIDFromProto(builder.TransactionBuilder.pb.TransactionID)
} else {
if client != nil {
transactionID = NewTransactionID(client.GetOperatorID())
} else {
return TransactionList{}, fmt.Errorf("client must have an operator or set a transaction ID to build a consensus message transaction")
}
}

// If chunk info is set then we aren't going to chunk the message
// Set all the required fields and return a list of 1
if builder.chunkInfoSet {
if builder.chunkInfoSet || len(builder.message) < chunkSize {
builder.pb.TopicID = builder.topicID.toProto()
builder.pb.Message = builder.message
builder.pb.ChunkInfo = &proto.ConsensusMessageChunkInfo{
Expand All @@ -81,12 +93,11 @@ func (builder ConsensusMessageSubmitTransaction) Build(client *Client) (Transact
List: make([]Transaction, 1),
}

list.List = append(list.List, transaction)
list.List[0] = transaction
return list, nil
}

chunks := uint64(len(builder.message) / chunkSize)
remainder := uint64(len(builder.message) % chunkSize)
chunks := uint64((len(builder.message) + (chunkSize - 1)) / chunkSize)

if chunks > builder.maxChunks {
return TransactionList{}, ErrMaxChunksExceeded{
Expand All @@ -95,43 +106,56 @@ func (builder ConsensusMessageSubmitTransaction) Build(client *Client) (Transact
}
}

if remainder != 0 {
chunks += 1
}

list := make([]Transaction, chunks)

var transactionID TransactionID
if builder.TransactionBuilder.pb.TransactionID != nil {
transactionID = transactionIDFromProto(builder.TransactionBuilder.pb.TransactionID)
} else {
transactionID = NewTransactionID(client.GetOperatorID())
}

for i := 1; i < len(builder.message); i += chunkSize {
for i := 0; uint64(i) < chunks; i += 1 {
start := i * chunkSize
end := (i + 1) * chunkSize
end := start + chunkSize

if (i+1)*chunkSize > len(builder.message) {
if end > len(builder.message) {
end = len(builder.message)
}

transaction, err := NewConsensusMessageSubmitTransaction().
SetMessage(builder.message[start:end]).
SetTopicID(builder.topicID).
SetChunkInfo(transactionID, int32(chunks), int32(i)+1).
SetTransactionID(transactionID).
SetNodeAccountID(accountIDFromProto(builder.TransactionBuilder.pb.NodeAccountID)).
Build(client)

transactionID = NewTransactionIDWithValidStart(transactionID.AccountID, transactionID.ValidStart.Add(1 * time.Nanosecond))

if err != nil {
return TransactionList{}, err
}

list = append(list, transaction.List[0])
list[i] = transaction.List[0]
}

return TransactionList{list}, nil
}

func (builder ConsensusMessageSubmitTransaction) Execute(client *Client) ([]TransactionID, error) {
list, err := builder.Build(client)
if err != nil {
return nil, err
}

ids := make([]TransactionID, len(list.List))

for i, tx := range list.List {
result, err := tx.Execute(client);
if err != nil {
return nil, err
}

ids[i] = result
}

return ids, nil
}

//
// The following _5_ must be copy-pasted at the bottom of **every** _transaction.go file
// We override the embedded fluent setter methods to return the outer type
Expand Down
6 changes: 3 additions & 3 deletions consensus_message_submit_transaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func TestSerializeConsensusMessageSubmitTransaction(t *testing.T) {

tx.Sign(key)

assert.Equal(t, `bodyBytes:"\n\014\n\006\010\316\247\212\345\005\022\002\030\002\022\002\030\003\030\300\204=\"\004\010\200\243\005\332\001\025\n\002\030c\022\017HelloHashgraph"sigMap:<sigPair:<pubKeyPrefix:"\344\361\300\353L}\315\303\347\353\021p\263\010\212=\022\242\227\364\243\353\342\362\205\003\375g5F\355\216"ed25519:"\307\333\307\010\\D`+"`"+`R\372\322\255zI$%\006\024\214\334\350\006g\021=\237\r\254e;+\234Y\335\235\246\270\215\234\235v\206e~F\261\025.\251yR\305s\301\347_\264\206\002XT\031<\004\002">>transactionID:<transactionValidStart:<seconds:1554158542>accountID:<accountNum:2>>nodeAccountID:<accountNum:3>transactionFee:1000000transactionValidDuration:<seconds:86400>consensusSubmitMessage:<topicID:<topicNum:99>message:"HelloHashgraph">`, strings.ReplaceAll(strings.ReplaceAll(tx.String(), " ", ""), "\n", ""))
assert.Equal(t, `bodyBytes:"\n\014\n\006\010\316\247\212\345\005\022\002\030\002\022\002\030\003\"\002\010x\332\001)\n\002\030c\022\017HelloHashgraph\032\022\n\014\n\006\010\316\247\212\345\005\022\002\030\002\020\001\030\001"sigMap:<sigPair:<pubKeyPrefix:"\344\361\300\353L}\315\303\347\353\021p\263\010\212=\022\242\227\364\243\353\342\362\205\003\375g5F\355\216"ed25519:"\366No\306\344\222\020m\341\376}W\306\2257x\020B\024\256X\000\240s\257\314e\205\337t\325\256)&|\247\006I\016\032\210K\216\3273\246\265\036V\r\020\347\343f\207\346\0211\377\345\023\307J\016">>transactionID:<transactionValidStart:<seconds:1554158542>accountID:<accountNum:2>>nodeAccountID:<accountNum:3>transactionValidDuration:<seconds:120>consensusSubmitMessage:<topicID:<topicNum:99>message:"HelloHashgraph"chunkInfo:<initialTransactionID:<transactionValidStart:<seconds:1554158542>accountID:<accountNum:2>>total:1number:1>>`, strings.ReplaceAll(strings.ReplaceAll(tx.List[0].String(), " ", ""), "\n", ""))
}

func TestConsensusMessageSubmitTransaction_Execute(t *testing.T) {
Expand Down Expand Up @@ -78,14 +78,14 @@ func TestConsensusMessageSubmitTransaction_Execute(t *testing.T) {

assert.Equal(t, uint64(0), info.SequenceNumber)

txID, err = NewConsensusMessageSubmitTransaction().
txIDs, err := NewConsensusMessageSubmitTransaction().
SetTopicID(topicID).
SetMessage([]byte("go-sdk::TestConsensusMessageSubmitTransaction_Execute::MessageSubmit")).
SetMaxTransactionFee(NewHbar(1)).
Execute(client)
assert.NoError(t, err)

_, err = txID.GetReceipt(client)
_, err = txIDs[0].GetReceipt(client)
assert.NoError(t, err)

info, err = NewConsensusTopicInfoQuery().
Expand Down

0 comments on commit 831c636

Please sign in to comment.