github.com/kaleido-io/firefly@v0.0.0-20210622132723-8b4b6aacb971/internal/orchestrator/data_query_test.go (about)

     1  // Copyright © 2021 Kaleido, Inc.
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  //
     5  // Licensed under the Apache License, Version 2.0 (the "License");
     6  // you may not use this file except in compliance with the License.
     7  // You may obtain a copy of the License at
     8  //
     9  //     http://www.apache.org/licenses/LICENSE-2.0
    10  //
    11  // Unless required by applicable law or agreed to in writing, software
    12  // distributed under the License is distributed on an "AS IS" BASIS,
    13  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  // See the License for the specific language governing permissions and
    15  // limitations under the License.
    16  
    17  package orchestrator
    18  
    19  import (
    20  	"context"
    21  	"fmt"
    22  	"testing"
    23  
    24  	"github.com/kaleido-io/firefly/pkg/database"
    25  	"github.com/kaleido-io/firefly/pkg/fftypes"
    26  	"github.com/stretchr/testify/assert"
    27  	"github.com/stretchr/testify/mock"
    28  )
    29  
    30  func TestGetNamespace(t *testing.T) {
    31  	or := newTestOrchestrator()
    32  	or.mdi.On("GetNamespace", mock.Anything, "ns1").Return(nil, nil)
    33  	_, err := or.GetNamespace(context.Background(), "ns1")
    34  	assert.NoError(t, err)
    35  }
    36  
    37  func TestGetTransactionByID(t *testing.T) {
    38  	or := newTestOrchestrator()
    39  	u := fftypes.NewUUID()
    40  	or.mdi.On("GetTransactionByID", mock.Anything, u).Return(nil, nil)
    41  	_, err := or.GetTransactionByID(context.Background(), "ns1", u.String())
    42  	assert.NoError(t, err)
    43  }
    44  
    45  func TestGetTransactionByIDBadID(t *testing.T) {
    46  	or := newTestOrchestrator()
    47  	_, err := or.GetTransactionByID(context.Background(), "", "")
    48  	assert.Regexp(t, "FF10142", err)
    49  }
    50  
    51  func TestGetTransactionOperationsOk(t *testing.T) {
    52  	or := newTestOrchestrator()
    53  	or.mdi.On("GetOperations", mock.Anything, mock.Anything).Return([]*fftypes.Operation{}, nil)
    54  	_, err := or.GetTransactionOperations(context.Background(), "ns1", fftypes.NewUUID().String())
    55  	assert.NoError(t, err)
    56  }
    57  
    58  func TestGetTransactionOperationBadID(t *testing.T) {
    59  	or := newTestOrchestrator()
    60  	or.mdi.On("GetOperations", mock.Anything, mock.Anything).Return([]*fftypes.Operation{}, nil)
    61  	_, err := or.GetTransactionOperations(context.Background(), "ns1", "")
    62  	assert.Regexp(t, "FF10142", err)
    63  }
    64  
    65  func TestGetNamespaces(t *testing.T) {
    66  	or := newTestOrchestrator()
    67  	or.mdi.On("GetNamespaces", mock.Anything, mock.Anything).Return([]*fftypes.Namespace{}, nil)
    68  	fb := database.NamespaceQueryFactory.NewFilter(context.Background())
    69  	f := fb.And(fb.Eq("name", "ns1"))
    70  	_, err := or.GetNamespaces(context.Background(), f)
    71  	assert.NoError(t, err)
    72  }
    73  
    74  func TestGetTransactions(t *testing.T) {
    75  	or := newTestOrchestrator()
    76  	u := fftypes.NewUUID()
    77  	or.mdi.On("GetTransactions", mock.Anything, mock.Anything).Return([]*fftypes.Transaction{}, nil)
    78  	fb := database.TransactionQueryFactory.NewFilter(context.Background())
    79  	f := fb.And(fb.Eq("id", u))
    80  	_, err := or.GetTransactions(context.Background(), "ns1", f)
    81  	assert.NoError(t, err)
    82  }
    83  
    84  func TestGetMessageByIDBadID(t *testing.T) {
    85  	or := newTestOrchestrator()
    86  	_, err := or.GetMessageByID(context.Background(), "", "", false)
    87  	assert.Regexp(t, "FF10142", err)
    88  }
    89  
    90  func TestGetMessageByIDOkNoValues(t *testing.T) {
    91  	or := newTestOrchestrator()
    92  	msgID := fftypes.NewUUID()
    93  	msg := &fftypes.Message{
    94  		Header: fftypes.MessageHeader{
    95  			ID: msgID,
    96  		},
    97  		Data: fftypes.DataRefs{
    98  			{ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32()},
    99  			{ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32()},
   100  		},
   101  	}
   102  	or.mdi.On("GetMessageByID", mock.Anything, mock.MatchedBy(func(u *fftypes.UUID) bool { return u.Equals(msgID) })).Return(msg, nil)
   103  
   104  	msgI, err := or.GetMessageByID(context.Background(), "ns1", msgID.String(), false)
   105  	assert.NoError(t, err)
   106  	assert.NotNil(t, msgI.InputData[0].ID)
   107  	assert.NotNil(t, msgI.InputData[0].Hash)
   108  	assert.Nil(t, msgI.InputData[0].Value)
   109  	assert.NotNil(t, msgI.InputData[1].ID)
   110  	assert.NotNil(t, msgI.InputData[1].Hash)
   111  	assert.Nil(t, msgI.InputData[1].Value)
   112  }
   113  
   114  func TestGetMessageByIDOkWithValues(t *testing.T) {
   115  	or := newTestOrchestrator()
   116  	msgID := fftypes.NewUUID()
   117  	msg := &fftypes.Message{
   118  		Header: fftypes.MessageHeader{
   119  			ID: msgID,
   120  		},
   121  		Data: fftypes.DataRefs{
   122  			{ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32()},
   123  			{ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32()},
   124  		},
   125  	}
   126  	or.mdi.On("GetMessageByID", mock.Anything, mock.MatchedBy(func(u *fftypes.UUID) bool { return u.Equals(msgID) })).Return(msg, nil)
   127  	or.mdm.On("GetMessageData", mock.Anything, mock.Anything, true).Return([]*fftypes.Data{
   128  		{ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32(), Value: fftypes.Byteable("{}")},
   129  		{ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32(), Value: fftypes.Byteable("{}")},
   130  	}, true, nil)
   131  
   132  	msgI, err := or.GetMessageByID(context.Background(), "ns1", msgID.String(), true)
   133  	assert.NoError(t, err)
   134  	assert.NotNil(t, msgI.InputData[0].ID)
   135  	assert.NotNil(t, msgI.InputData[0].Hash)
   136  	assert.NotNil(t, msgI.InputData[0].Value)
   137  	assert.NotNil(t, msgI.InputData[1].ID)
   138  	assert.NotNil(t, msgI.InputData[1].Hash)
   139  	assert.NotNil(t, msgI.InputData[1].Value)
   140  }
   141  
   142  func TestGetMessageByIDValuesFail(t *testing.T) {
   143  	or := newTestOrchestrator()
   144  	msgID := fftypes.NewUUID()
   145  	msg := &fftypes.Message{
   146  		Header: fftypes.MessageHeader{
   147  			ID: msgID,
   148  		},
   149  		Data: fftypes.DataRefs{
   150  			{ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32()},
   151  			{ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32()},
   152  		},
   153  	}
   154  	or.mdi.On("GetMessageByID", mock.Anything, mock.Anything).Return(msg, nil)
   155  	or.mdm.On("GetMessageData", mock.Anything, mock.Anything, true).Return(nil, false, fmt.Errorf("pop"))
   156  
   157  	_, err := or.GetMessageByID(context.Background(), "ns1", msgID.String(), true)
   158  	assert.EqualError(t, err, "pop")
   159  }
   160  func TestGetMessages(t *testing.T) {
   161  	or := newTestOrchestrator()
   162  	u := fftypes.NewUUID()
   163  	or.mdi.On("GetMessages", mock.Anything, mock.Anything).Return([]*fftypes.Message{}, nil)
   164  	fb := database.MessageQueryFactory.NewFilter(context.Background())
   165  	f := fb.And(fb.Eq("id", u))
   166  	_, err := or.GetMessages(context.Background(), "ns1", f)
   167  	assert.NoError(t, err)
   168  }
   169  
   170  func TestGetMessagesForData(t *testing.T) {
   171  	or := newTestOrchestrator()
   172  	u := fftypes.NewUUID()
   173  	or.mdi.On("GetMessagesForData", mock.Anything, u, mock.Anything).Return([]*fftypes.Message{}, nil)
   174  	fb := database.MessageQueryFactory.NewFilter(context.Background())
   175  	f := fb.And(fb.Eq("id", u))
   176  	_, err := or.GetMessagesForData(context.Background(), "ns1", u.String(), f)
   177  	assert.NoError(t, err)
   178  }
   179  
   180  func TestGetMessagesForDataBadID(t *testing.T) {
   181  	or := newTestOrchestrator()
   182  	f := database.MessageQueryFactory.NewFilter(context.Background()).And()
   183  	_, err := or.GetMessagesForData(context.Background(), "!wrong", "!bad", f)
   184  	assert.Regexp(t, "FF10142", err)
   185  }
   186  
   187  func TestGetMessageTransactionOk(t *testing.T) {
   188  	or := newTestOrchestrator()
   189  	msgID := fftypes.NewUUID()
   190  	batchID := fftypes.NewUUID()
   191  	txID := fftypes.NewUUID()
   192  	or.mdi.On("GetMessageByID", mock.Anything, uuidMatches(msgID)).Return(&fftypes.Message{
   193  		BatchID: batchID,
   194  		Header: fftypes.MessageHeader{
   195  			TxType: fftypes.TransactionTypeBatchPin,
   196  		},
   197  	}, nil)
   198  	or.mdi.On("GetBatchByID", mock.Anything, uuidMatches(batchID)).Return(&fftypes.Batch{
   199  		Payload: fftypes.BatchPayload{
   200  			TX: fftypes.TransactionRef{
   201  				Type: fftypes.TransactionTypeBatchPin,
   202  				ID:   txID,
   203  			},
   204  		},
   205  	}, nil)
   206  	or.mdi.On("GetTransactionByID", mock.Anything, uuidMatches(txID)).Return(&fftypes.Transaction{
   207  		ID: txID,
   208  	}, nil)
   209  	tx, err := or.GetMessageTransaction(context.Background(), "ns1", msgID.String())
   210  	assert.NoError(t, err)
   211  	assert.Equal(t, *txID, *tx.ID)
   212  	or.mdi.AssertExpectations(t)
   213  }
   214  
   215  func TestGetMessageTransactionOperations(t *testing.T) {
   216  	or := newTestOrchestrator()
   217  	msgID := fftypes.NewUUID()
   218  	batchID := fftypes.NewUUID()
   219  	txID := fftypes.NewUUID()
   220  	or.mdi.On("GetMessageByID", mock.Anything, uuidMatches(msgID)).Return(&fftypes.Message{
   221  		BatchID: batchID,
   222  		Header: fftypes.MessageHeader{
   223  			TxType: fftypes.TransactionTypeBatchPin,
   224  		},
   225  	}, nil)
   226  	or.mdi.On("GetBatchByID", mock.Anything, uuidMatches(batchID)).Return(&fftypes.Batch{
   227  		Payload: fftypes.BatchPayload{
   228  			TX: fftypes.TransactionRef{
   229  				Type: fftypes.TransactionTypeBatchPin,
   230  				ID:   txID,
   231  			},
   232  		},
   233  	}, nil)
   234  	or.mdi.On("GetOperations", mock.Anything, mock.Anything).Return([]*fftypes.Operation{}, nil)
   235  	ops, err := or.GetMessageOperations(context.Background(), "ns1", msgID.String())
   236  	assert.NoError(t, err)
   237  	assert.Len(t, ops, 0)
   238  	or.mdi.AssertExpectations(t)
   239  }
   240  
   241  func TestGetMessageTransactionOperationsNoTX(t *testing.T) {
   242  	or := newTestOrchestrator()
   243  	msgID := fftypes.NewUUID()
   244  	or.mdi.On("GetMessageByID", mock.Anything, uuidMatches(msgID)).Return(&fftypes.Message{}, nil)
   245  	_, err := or.GetMessageOperations(context.Background(), "ns1", msgID.String())
   246  	assert.Regexp(t, "FF10207", err)
   247  	or.mdi.AssertExpectations(t)
   248  }
   249  
   250  func TestGetMessageTransactionNoBatchTX(t *testing.T) {
   251  	or := newTestOrchestrator()
   252  	msgID := fftypes.NewUUID()
   253  	batchID := fftypes.NewUUID()
   254  	or.mdi.On("GetMessageByID", mock.Anything, uuidMatches(msgID)).Return(&fftypes.Message{
   255  		BatchID: batchID,
   256  		Header: fftypes.MessageHeader{
   257  			TxType: fftypes.TransactionTypeBatchPin,
   258  		},
   259  	}, nil)
   260  	or.mdi.On("GetBatchByID", mock.Anything, uuidMatches(batchID)).Return(&fftypes.Batch{}, nil)
   261  	_, err := or.GetMessageTransaction(context.Background(), "ns1", msgID.String())
   262  	assert.Regexp(t, "FF10210", err)
   263  }
   264  
   265  func TestGetMessageTransactionNoBatch(t *testing.T) {
   266  	or := newTestOrchestrator()
   267  	msgID := fftypes.NewUUID()
   268  	batchID := fftypes.NewUUID()
   269  	or.mdi.On("GetMessageByID", mock.Anything, uuidMatches(msgID)).Return(&fftypes.Message{
   270  		BatchID: batchID,
   271  		Header: fftypes.MessageHeader{
   272  			TxType: fftypes.TransactionTypeBatchPin,
   273  		},
   274  	}, nil)
   275  	or.mdi.On("GetBatchByID", mock.Anything, uuidMatches(batchID)).Return(nil, nil)
   276  	_, err := or.GetMessageTransaction(context.Background(), "ns1", msgID.String())
   277  	assert.Regexp(t, "FF10209", err)
   278  }
   279  
   280  func TestGetMessageTransactionBatchLookupErr(t *testing.T) {
   281  	or := newTestOrchestrator()
   282  	msgID := fftypes.NewUUID()
   283  	batchID := fftypes.NewUUID()
   284  	or.mdi.On("GetMessageByID", mock.Anything, uuidMatches(msgID)).Return(&fftypes.Message{
   285  		BatchID: batchID,
   286  		Header: fftypes.MessageHeader{
   287  			TxType: fftypes.TransactionTypeBatchPin,
   288  		},
   289  	}, nil)
   290  	or.mdi.On("GetBatchByID", mock.Anything, uuidMatches(batchID)).Return(nil, fmt.Errorf("pop"))
   291  	_, err := or.GetMessageTransaction(context.Background(), "ns1", msgID.String())
   292  	assert.Regexp(t, "pop", err)
   293  }
   294  
   295  func TestGetMessageTransactionNoBatchID(t *testing.T) {
   296  	or := newTestOrchestrator()
   297  	msgID := fftypes.NewUUID()
   298  	or.mdi.On("GetMessageByID", mock.Anything, uuidMatches(msgID)).Return(&fftypes.Message{
   299  		Header: fftypes.MessageHeader{
   300  			TxType: fftypes.TransactionTypeBatchPin,
   301  		},
   302  	}, nil)
   303  	_, err := or.GetMessageTransaction(context.Background(), "ns1", msgID.String())
   304  	assert.Regexp(t, "FF10208", err)
   305  }
   306  
   307  func TestGetMessageTransactionNoTx(t *testing.T) {
   308  	or := newTestOrchestrator()
   309  	msgID := fftypes.NewUUID()
   310  	or.mdi.On("GetMessageByID", mock.Anything, uuidMatches(msgID)).Return(&fftypes.Message{}, nil)
   311  	_, err := or.GetMessageTransaction(context.Background(), "ns1", msgID.String())
   312  	assert.Regexp(t, "FF10207", err)
   313  }
   314  
   315  func TestGetMessageTransactionMessageNotFound(t *testing.T) {
   316  	or := newTestOrchestrator()
   317  	msgID := fftypes.NewUUID()
   318  	or.mdi.On("GetMessageByID", mock.Anything, uuidMatches(msgID)).Return(nil, nil)
   319  	_, err := or.GetMessageTransaction(context.Background(), "ns1", msgID.String())
   320  	assert.Regexp(t, "FF10109", err)
   321  }
   322  
   323  func TestGetMessageData(t *testing.T) {
   324  	or := newTestOrchestrator()
   325  	msg := &fftypes.Message{
   326  		Header: fftypes.MessageHeader{
   327  			ID: fftypes.NewUUID(),
   328  		},
   329  		Data: fftypes.DataRefs{
   330  			{ID: fftypes.NewUUID()},
   331  			{ID: fftypes.NewUUID()},
   332  		},
   333  	}
   334  	or.mdi.On("GetMessageByID", mock.Anything, mock.Anything).Return(msg, nil)
   335  	or.mdm.On("GetMessageData", mock.Anything, msg, true).Return([]*fftypes.Data{}, true, nil)
   336  	_, err := or.GetMessageData(context.Background(), "ns1", fftypes.NewUUID().String())
   337  	assert.NoError(t, err)
   338  }
   339  
   340  func TestGetMessageDataBadMsg(t *testing.T) {
   341  	or := newTestOrchestrator()
   342  	or.mdi.On("GetMessageByID", mock.Anything, mock.Anything).Return(nil, nil)
   343  	_, err := or.GetMessageData(context.Background(), "ns1", fftypes.NewUUID().String())
   344  	assert.Regexp(t, "FF10109", err)
   345  }
   346  
   347  func TestGetMessageEventsOk(t *testing.T) {
   348  	or := newTestOrchestrator()
   349  	msg := &fftypes.Message{
   350  		Header: fftypes.MessageHeader{
   351  			ID: fftypes.NewUUID(),
   352  		},
   353  		Data: fftypes.DataRefs{
   354  			{ID: fftypes.NewUUID()},
   355  			{ID: fftypes.NewUUID()},
   356  		},
   357  	}
   358  	or.mdi.On("GetMessageByID", mock.Anything, mock.Anything).Return(msg, nil)
   359  	or.mdi.On("GetEvents", mock.Anything, mock.Anything).Return([]*fftypes.Event{}, nil)
   360  	fb := database.EventQueryFactory.NewFilter(context.Background())
   361  	f := fb.And(fb.Eq("type", fftypes.EventTypeMessageConfirmed))
   362  	_, err := or.GetMessageEvents(context.Background(), "ns1", fftypes.NewUUID().String(), f)
   363  	assert.NoError(t, err)
   364  	calculatedFilter, err := or.mdi.Calls[1].Arguments[1].(database.Filter).Finalize()
   365  	assert.NoError(t, err)
   366  	assert.Equal(t, fmt.Sprintf(
   367  		`( type == 'message_confirmed' ) && ( reference IN ['%s','%s','%s'] )`,
   368  		msg.Header.ID, msg.Data[0].ID, msg.Data[1].ID,
   369  	), calculatedFilter.String())
   370  	assert.NoError(t, err)
   371  }
   372  
   373  func TestGetMessageEventsBadMsgID(t *testing.T) {
   374  	or := newTestOrchestrator()
   375  	fb := database.EventQueryFactory.NewFilter(context.Background())
   376  	f := fb.And(fb.Eq("type", fftypes.EventTypeMessageConfirmed))
   377  	or.mdi.On("GetMessageByID", mock.Anything, mock.Anything).Return(nil, nil)
   378  	ev, err := or.GetMessageEvents(context.Background(), "ns1", fftypes.NewUUID().String(), f)
   379  	assert.Regexp(t, "FF10109", err)
   380  	assert.Nil(t, ev)
   381  }
   382  
   383  func TestGetBatchByID(t *testing.T) {
   384  	or := newTestOrchestrator()
   385  	u := fftypes.NewUUID()
   386  	or.mdi.On("GetBatchByID", mock.Anything, u).Return(nil, nil)
   387  	_, err := or.GetBatchByID(context.Background(), "ns1", u.String())
   388  	assert.NoError(t, err)
   389  }
   390  
   391  func TestGetBatchByIDBadID(t *testing.T) {
   392  	or := newTestOrchestrator()
   393  	_, err := or.GetBatchByID(context.Background(), "", "")
   394  	assert.Regexp(t, "FF10142", err)
   395  }
   396  
   397  func TestGetBatches(t *testing.T) {
   398  	or := newTestOrchestrator()
   399  	u := fftypes.NewUUID()
   400  	or.mdi.On("GetBatches", mock.Anything, mock.Anything).Return([]*fftypes.Batch{}, nil)
   401  	fb := database.BatchQueryFactory.NewFilter(context.Background())
   402  	f := fb.And(fb.Eq("id", u))
   403  	_, err := or.GetBatches(context.Background(), "ns1", f)
   404  	assert.NoError(t, err)
   405  }
   406  
   407  func TestGetDataByID(t *testing.T) {
   408  	or := newTestOrchestrator()
   409  	u := fftypes.NewUUID()
   410  	or.mdi.On("GetDataByID", mock.Anything, u, true).Return(nil, nil)
   411  	_, err := or.GetDataByID(context.Background(), "ns1", u.String())
   412  	assert.NoError(t, err)
   413  }
   414  
   415  func TestGetDataByIDBadID(t *testing.T) {
   416  	or := newTestOrchestrator()
   417  	_, err := or.GetDataByID(context.Background(), "", "")
   418  	assert.Regexp(t, "FF10142", err)
   419  }
   420  
   421  func TestGetData(t *testing.T) {
   422  	or := newTestOrchestrator()
   423  	u := fftypes.NewUUID()
   424  	or.mdi.On("GetData", mock.Anything, mock.Anything).Return([]*fftypes.Data{}, nil)
   425  	fb := database.DataQueryFactory.NewFilter(context.Background())
   426  	f := fb.And(fb.Eq("id", u))
   427  	_, err := or.GetData(context.Background(), "ns1", f)
   428  	assert.NoError(t, err)
   429  }
   430  
   431  func TestGetDataDefsByID(t *testing.T) {
   432  	or := newTestOrchestrator()
   433  	u := fftypes.NewUUID()
   434  	or.mdi.On("GetDatatypeByID", mock.Anything, u).Return(nil, nil)
   435  	_, err := or.GetDatatypeByID(context.Background(), "ns1", u.String())
   436  	assert.NoError(t, err)
   437  }
   438  
   439  func TestGetDataDefsByIDBadID(t *testing.T) {
   440  	or := newTestOrchestrator()
   441  	_, err := or.GetDatatypeByID(context.Background(), "", "")
   442  	assert.Regexp(t, "FF10142", err)
   443  }
   444  
   445  func TestGetOperationByID(t *testing.T) {
   446  	or := newTestOrchestrator()
   447  	u := fftypes.NewUUID()
   448  	or.mdi.On("GetOperationByID", mock.Anything, u).Return(nil, nil)
   449  	_, err := or.GetOperationByID(context.Background(), "ns1", u.String())
   450  	assert.NoError(t, err)
   451  }
   452  
   453  func TestGetOperationIDBadID(t *testing.T) {
   454  	or := newTestOrchestrator()
   455  	_, err := or.GetOperationByID(context.Background(), "", "")
   456  	assert.Regexp(t, "FF10142", err)
   457  }
   458  
   459  func TestGetEventByID(t *testing.T) {
   460  	or := newTestOrchestrator()
   461  	u := fftypes.NewUUID()
   462  	or.mdi.On("GetEventByID", mock.Anything, u).Return(nil, nil)
   463  	_, err := or.GetEventByID(context.Background(), "ns1", u.String())
   464  	assert.NoError(t, err)
   465  }
   466  
   467  func TestGetEventIDBadID(t *testing.T) {
   468  	or := newTestOrchestrator()
   469  	_, err := or.GetEventByID(context.Background(), "", "")
   470  	assert.Regexp(t, "FF10142", err)
   471  }
   472  
   473  func TestGetDatatypes(t *testing.T) {
   474  	or := newTestOrchestrator()
   475  	u := fftypes.NewUUID()
   476  	or.mdi.On("GetDatatypes", mock.Anything, mock.Anything).Return([]*fftypes.Datatype{}, nil)
   477  	fb := database.DatatypeQueryFactory.NewFilter(context.Background())
   478  	f := fb.And(fb.Eq("id", u))
   479  	_, err := or.GetDatatypes(context.Background(), "ns1", f)
   480  	assert.NoError(t, err)
   481  }
   482  
   483  func TestGetOperations(t *testing.T) {
   484  	or := newTestOrchestrator()
   485  	u := fftypes.NewUUID()
   486  	or.mdi.On("GetOperations", mock.Anything, mock.Anything).Return([]*fftypes.Operation{}, nil)
   487  	fb := database.OperationQueryFactory.NewFilter(context.Background())
   488  	f := fb.And(fb.Eq("id", u))
   489  	_, err := or.GetOperations(context.Background(), "ns1", f)
   490  	assert.NoError(t, err)
   491  }
   492  
   493  func TestGetEvents(t *testing.T) {
   494  	or := newTestOrchestrator()
   495  	u := fftypes.NewUUID()
   496  	or.mdi.On("GetEvents", mock.Anything, mock.Anything).Return([]*fftypes.Event{}, nil)
   497  	fb := database.EventQueryFactory.NewFilter(context.Background())
   498  	f := fb.And(fb.Eq("id", u))
   499  	_, err := or.GetEvents(context.Background(), "ns1", f)
   500  	assert.NoError(t, err)
   501  }