diff --git a/network/check_test.go b/network/check_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..45a3dedd804cd6118f6e8507e6e0ec044bb1760e
--- /dev/null
+++ b/network/check_test.go
@@ -0,0 +1,74 @@
+package network
+
+import (
+	bloom "gitlab.com/elixxir/bloomfilter"
+	"gitlab.com/elixxir/client/network/identity/receptionID/store"
+	"gitlab.com/elixxir/client/storage/versioned"
+	"gitlab.com/elixxir/comms/mixmessages"
+	"gitlab.com/elixxir/ekv"
+	"gitlab.com/xx_network/primitives/id"
+	"testing"
+)
+
+// TestChecker tests the basic operation for Checker
+func TestChecker(t *testing.T) {
+	// RID for testing
+	rid := id.Round(2)
+
+	// Init bloom ring buff
+	br, err := bloom.Init(10, 0.01)
+	if err != nil {
+		t.Errorf("Failed to init bloom ring: %+v", err)
+	}
+
+	// Create filters object not in range
+	filters := []*RemoteFilter{
+		{
+			data: &mixmessages.ClientBloom{
+				Filter:     nil,
+				FirstRound: 0,
+				RoundRange: 1,
+			},
+			filter: br,
+		},
+	}
+
+	// Init a kv and a checked rounds structure
+	kv := versioned.NewKV(ekv.Memstore{})
+	cr, err := store.NewCheckedRounds(5, kv)
+	if err != nil {
+		t.Errorf("Failed to create checked rounds store: %+v", err)
+	}
+
+	ok := Checker(rid, filters, cr)
+	if ok {
+		t.Errorf("Should not have received OK response when appropriate data not added to stores")
+	}
+
+	cr2, err := store.NewCheckedRounds(5, kv)
+	if err != nil {
+		t.Errorf("Failed to create checked rounds store: %+v", err)
+	}
+	cr2.Check(rid)
+	ok = Checker(rid, filters, cr2)
+	if !ok {
+		t.Errorf("Checker should have returned ok if round checked in checkrounds")
+	}
+
+	br.Add(serializeRound(rid))
+	filters = []*RemoteFilter{
+		{
+			data: &mixmessages.ClientBloom{
+				Filter:     nil,
+				FirstRound: 1,
+				RoundRange: 5,
+			},
+			filter: br,
+		},
+	}
+	ok = Checker(rid, filters, cr)
+	if !ok {
+		t.Errorf("Checker did not return OK for round in filter")
+	}
+
+}
diff --git a/network/critical_test.go b/network/critical_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..f9e1928cd253403662af9f86884552ce4f4f8484
--- /dev/null
+++ b/network/critical_test.go
@@ -0,0 +1,104 @@
+package network
+
+import (
+	"errors"
+	"gitlab.com/elixxir/client/stoppable"
+	"gitlab.com/elixxir/client/storage/versioned"
+	"gitlab.com/elixxir/comms/mixmessages"
+	ds "gitlab.com/elixxir/comms/network/dataStructures"
+	"gitlab.com/elixxir/ekv"
+	"gitlab.com/elixxir/primitives/format"
+	"gitlab.com/elixxir/primitives/states"
+	"gitlab.com/xx_network/primitives/id"
+	"gitlab.com/xx_network/primitives/id/ephemeral"
+	"testing"
+	"time"
+)
+
+type mockMonitor struct{}
+
+func (m *mockMonitor) AddHealthCallback(f func(bool)) uint64 {
+	return 0
+}
+func (m *mockMonitor) RemoveHealthCallback(uint64) {
+	return
+}
+func (m *mockMonitor) IsHealthy() bool {
+	return true
+}
+func (m *mockMonitor) WasHealthy() bool {
+	return true
+}
+func (m *mockMonitor) StartProcesses() (stoppable.Stoppable, error) {
+	return stoppable.NewSingle("t"), nil
+}
+
+type mockRegistrar struct {
+	statusReturn bool
+}
+
+func (mr *mockRegistrar) AddRoundEventChan(rid id.Round, eventChan chan ds.EventReturn,
+	timeout time.Duration, validStates ...states.Round) *ds.EventCallback {
+	eventChan <- ds.EventReturn{
+		RoundInfo: &mixmessages.RoundInfo{
+			ID:                         2,
+			UpdateID:                   0,
+			State:                      0,
+			BatchSize:                  0,
+			Topology:                   nil,
+			Timestamps:                 nil,
+			Errors:                     nil,
+			ClientErrors:               nil,
+			ResourceQueueTimeoutMillis: 0,
+			Signature:                  nil,
+			AddressSpaceSize:           0,
+			EccSignature:               nil,
+		},
+		TimedOut: mr.statusReturn,
+	}
+	return &ds.EventCallback{}
+}
+
+func mockCriticalSender(msg format.Message, recipient *id.ID,
+	params CMIXParams) (id.Round, ephemeral.Id, error) {
+	return id.Round(1), ephemeral.Id{}, nil
+}
+
+func mockFailCriticalSender(msg format.Message, recipient *id.ID,
+	params CMIXParams) (id.Round, ephemeral.Id, error) {
+	return id.Round(1), ephemeral.Id{}, errors.New("Test error")
+}
+
+// TestCritical tests the basic functions of the critical messaging system
+func TestCritical(t *testing.T) {
+	// Init mock structures & start thread
+	kv := versioned.NewKV(ekv.Memstore{})
+	mr := &mockRegistrar{
+		statusReturn: true,
+	}
+	c := newCritical(kv, &mockMonitor{}, mr, mockCriticalSender)
+	s := stoppable.NewSingle("test")
+	go c.runCriticalMessages(s)
+
+	// Case 1 - should fail
+	recipientID := id.NewIdFromString("zezima", id.User, t)
+	c.Add(format.NewMessage(2048), recipientID, GetDefaultCMIXParams())
+	c.trigger <- true
+	time.Sleep(500 * time.Millisecond)
+
+	// Case 2 - should succeed
+	mr.statusReturn = false
+	c.Add(format.NewMessage(2048), recipientID, GetDefaultCMIXParams())
+	c.trigger <- true
+	time.Sleep(500 * time.Millisecond)
+
+	// Case 3 - should fail
+	c.send = mockFailCriticalSender
+	c.Add(format.NewMessage(2048), recipientID, GetDefaultCMIXParams())
+	c.trigger <- true
+	time.Sleep(time.Second)
+	err := s.Close()
+	if err != nil {
+		t.Errorf("Failed to stop critical: %+v", err)
+	}
+}