From 511db39f9b452fe9e1f41db0aaee79f2c1282a82 Mon Sep 17 00:00:00 2001
From: josh <josh@elixxir.io>
Date: Fri, 25 Jun 2021 10:42:04 -0700
Subject: [PATCH] Add tests for remove filters

---
 network/rounds/remoteFilters.go      |   7 +
 network/rounds/remoteFilters_test.go | 202 +++++++++++++++++++++++++++
 storage/ndf_test.go                  |   1 +
 3 files changed, 210 insertions(+)
 create mode 100644 network/rounds/remoteFilters_test.go
 create mode 100644 storage/ndf_test.go

diff --git a/network/rounds/remoteFilters.go b/network/rounds/remoteFilters.go
index e2a225632..7a434be07 100644
--- a/network/rounds/remoteFilters.go
+++ b/network/rounds/remoteFilters.go
@@ -1,3 +1,10 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright © 2020 xx network SEZC                                          //
+//                                                                           //
+// Use of this source code is governed by a license that can be found in the //
+// LICENSE file                                                              //
+///////////////////////////////////////////////////////////////////////////////
+
 package rounds
 
 import (
diff --git a/network/rounds/remoteFilters_test.go b/network/rounds/remoteFilters_test.go
new file mode 100644
index 000000000..5a5e381e0
--- /dev/null
+++ b/network/rounds/remoteFilters_test.go
@@ -0,0 +1,202 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright © 2020 xx network SEZC                                          //
+//                                                                           //
+// Use of this source code is governed by a license that can be found in the //
+// LICENSE file                                                              //
+///////////////////////////////////////////////////////////////////////////////
+
+package rounds
+
+import (
+	bloom "gitlab.com/elixxir/bloomfilter"
+	"gitlab.com/elixxir/client/interfaces"
+	"gitlab.com/elixxir/client/storage/reception"
+	"gitlab.com/elixxir/comms/mixmessages"
+	"gitlab.com/xx_network/primitives/id"
+	"gitlab.com/xx_network/primitives/id/ephemeral"
+	"reflect"
+	"testing"
+	"time"
+)
+
+// Unit test NewRemoteFilter
+func TestNewRemoteFilter(t *testing.T) {
+	bloomFilter := &mixmessages.ClientBloom{
+		Filter:     nil,
+		FirstRound: 0,
+		RoundRange: 0,
+	}
+
+	rf := NewRemoteFilter(bloomFilter)
+	if !reflect.DeepEqual(rf.data, bloomFilter) {
+		t.Fatalf("NewRemoteFilter() error: "+
+			"RemoteFilter not initialized as expected."+
+			"\n\tExpected: %v\n\tReceived: %v", bloomFilter, rf.data)
+	}
+}
+
+// Unit test GetFilter
+func TestRemoteFilter_GetFilter(t *testing.T) {
+	testFilter, err := bloom.InitByParameters(interfaces.BloomFilterSize,
+		interfaces.BloomFilterHashes)
+	if err != nil {
+		t.Fatalf("GetFilter error: " +
+			"Cannot initialize bloom filter for setup: %v", err)
+	}
+
+	data, err := testFilter.MarshalBinary()
+	if err != nil {
+		t.Fatalf("GetFilter error: " +
+			"Cannot marshal filter for setup: %v", err)
+	}
+
+	bloomFilter := &mixmessages.ClientBloom{
+		Filter:     data,
+		FirstRound: 0,
+		RoundRange: 0,
+	}
+
+	rf := NewRemoteFilter(bloomFilter)
+	retrievedFilter := rf.GetFilter()
+	if !reflect.DeepEqual(retrievedFilter, testFilter) {
+		t.Fatalf("GetFilter error: " +
+			"Did not retrieve expected filter." +
+			"\n\tExpected: %v\n\tReceived: %v", testFilter, retrievedFilter)
+	}
+}
+
+// Unit test fro FirstRound and LastRound
+func TestRemoteFilter_FirstLastRound(t *testing.T) {
+	firstRound := uint64(25)
+	roundRange := uint32(75)
+	bloomFilter := &mixmessages.ClientBloom{
+		Filter:     nil,
+		FirstRound: firstRound,
+		RoundRange: roundRange,
+	}
+	rf := NewRemoteFilter(bloomFilter)
+
+	// Test FirstRound
+	receivedFirstRound := rf.FirstRound()
+	if receivedFirstRound != id.Round(firstRound) {
+		t.Fatalf("FirstRound error: " +
+			"Did not receive expected round." +
+			"\n\tExpected: %v\n\tReceived: %v", firstRound, receivedFirstRound)
+	}
+
+	// Test LastRound
+	receivedLastRound := rf.LastRound()
+	if receivedLastRound != id.Round(firstRound + uint64(roundRange)) {
+		t.Fatalf("LastRound error: " +
+			"Did not receive expected round." +
+			"\n\tExpected: %v\n\tReceived: %v", receivedLastRound, firstRound + uint64(roundRange))
+	}
+
+}
+
+// In bounds test
+func TestValidFilterRange(t *testing.T) {
+	firstRound := uint64(25)
+	roundRange := uint32(75)
+	testFilter, err := bloom.InitByParameters(interfaces.BloomFilterSize,
+		interfaces.BloomFilterHashes)
+	if err != nil {
+		t.Fatalf("GetFilter error: " +
+			"Cannot initialize bloom filter for setup: %v", err)
+	}
+
+	data, err := testFilter.MarshalBinary()
+	if err != nil {
+		t.Fatalf("GetFilter error: " +
+			"Cannot marshal filter for setup: %v", err)
+	}
+
+	// Construct an in bounds value
+	expectedEphID := ephemeral.Id{1, 2, 3, 4, 5, 6, 7, 8}
+	requestGateway := id.NewIdFromString(ReturningGateway, id.Gateway, t)
+	iu := reception.IdentityUse{
+		Identity: reception.Identity{
+			EphId:  expectedEphID,
+			Source: requestGateway,
+			StartValid: time.Now().Add(12*time.Hour),
+			EndValid: time.Now().Add(24*time.Hour),
+		},
+	}
+
+
+	bloomFilter := &mixmessages.ClientBloom{
+		Filter:     data,
+		FirstRound: firstRound,
+		RoundRange: roundRange,
+	}
+
+	msg := &mixmessages.ClientBlooms{
+		Period: int64(12 * time.Hour ),
+		FirstTimestamp: time.Now().UnixNano(),
+		Filters: []*mixmessages.ClientBloom{bloomFilter},
+	}
+
+	start, end, outOfBounds := ValidFilterRange(iu, msg)
+	if outOfBounds {
+		t.Errorf("ValidFilterRange error: " +
+			"Range should not be out of bounds")
+	}
+
+	if start != 0 && end != 1 {
+		t.Errorf("ValidFilterRange error: " +
+			"Unexpected indices returned. " +
+			"\n\tExpected start: %v\n\tReceived start: %v" +
+			"\n\tExpected end: %v\n\tReceived end: %v", 0, start, 1, end)
+	}
+
+}
+
+// out of bounds test
+func TestValidFilterRange_OutBounds(t *testing.T) {
+	firstRound := uint64(25)
+	roundRange := uint32(75)
+	testFilter, err := bloom.InitByParameters(interfaces.BloomFilterSize,
+		interfaces.BloomFilterHashes)
+	if err != nil {
+		t.Fatalf("GetFilter error: " +
+			"Cannot initialize bloom filter for setup: %v", err)
+	}
+
+	data, err := testFilter.MarshalBinary()
+	if err != nil {
+		t.Fatalf("GetFilter error: " +
+			"Cannot marshal filter for setup: %v", err)
+	}
+
+	// Construct an in bounds value
+	expectedEphID := ephemeral.Id{1, 2, 3, 4, 5, 6, 7, 8}
+	requestGateway := id.NewIdFromString(ReturningGateway, id.Gateway, t)
+	iu := reception.IdentityUse{
+		Identity: reception.Identity{
+			EphId:  expectedEphID,
+			Source: requestGateway,
+			StartValid: time.Now().Add(-24*time.Hour),
+			EndValid: time.Now().Add(-36*time.Hour),
+		},
+	}
+
+
+	bloomFilter := &mixmessages.ClientBloom{
+		Filter:     data,
+		FirstRound: firstRound,
+		RoundRange: roundRange,
+	}
+
+	msg := &mixmessages.ClientBlooms{
+		Period: int64(12 * time.Hour ),
+		FirstTimestamp: time.Now().UnixNano(),
+		Filters: []*mixmessages.ClientBloom{bloomFilter},
+	}
+
+	_, _, outOfBounds := ValidFilterRange(iu, msg)
+	if !outOfBounds {
+		t.Errorf("ValidFilterRange error: " +
+			"Range should be out of bounds")
+	}
+
+}
\ No newline at end of file
diff --git a/storage/ndf_test.go b/storage/ndf_test.go
new file mode 100644
index 000000000..82be0547e
--- /dev/null
+++ b/storage/ndf_test.go
@@ -0,0 +1 @@
+package storage
-- 
GitLab