From 2828d044f3b480b7d9b15305320769df18922be5 Mon Sep 17 00:00:00 2001
From: Damian Ramirez <damian.ramirez@lambdaclass.com>
Date: Tue, 21 Jan 2025 17:05:12 -0300
Subject: [PATCH 1/4] Create test for SubscribeToNewPubkeyRegistrations

---
 .../clients/avsregistry/subscriber_test.go    | 54 +++++++++++++++++++
 1 file changed, 54 insertions(+)
 create mode 100644 chainio/clients/avsregistry/subscriber_test.go

diff --git a/chainio/clients/avsregistry/subscriber_test.go b/chainio/clients/avsregistry/subscriber_test.go
new file mode 100644
index 00000000..87809bf4
--- /dev/null
+++ b/chainio/clients/avsregistry/subscriber_test.go
@@ -0,0 +1,54 @@
+package avsregistry_test
+
+import (
+	"context"
+	"testing"
+	"time"
+
+	"github.com/Layr-Labs/eigensdk-go/crypto/bls"
+	"github.com/Layr-Labs/eigensdk-go/testutils"
+	"github.com/Layr-Labs/eigensdk-go/testutils/testclients"
+	"github.com/Layr-Labs/eigensdk-go/types"
+	"github.com/ethereum/go-ethereum/crypto"
+	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
+)
+
+func TestSubscriberAvsRegistry(t *testing.T) {
+	client, _ := testclients.BuildTestClients(t)
+	chainSubscriber := client.AvsRegistryChainSubscriber
+	chainWriter := client.AvsRegistryChainWriter
+
+	pubKeyRegistrations, event, err := chainSubscriber.SubscribeToNewPubkeyRegistrations()
+	defer event.Unsubscribe()
+	require.NoError(t, err)
+
+	// Emit a NewPubkeyRegistration event creating a new operator
+	keypair, err := bls.NewKeyPairFromString("0x01")
+	require.NoError(t, err, "Failed to create BLS key pair")
+
+	ecdsaPrivateKey, err := crypto.HexToECDSA(testutils.ANVIL_FIRST_PRIVATE_KEY)
+	require.NoError(t, err, "Failed to parse ECDSA private key")
+
+	quorumNumbers := types.QuorumNums{0}
+
+	receipt, err := chainWriter.RegisterOperator(
+		context.Background(),
+		ecdsaPrivateKey,
+		keypair,
+		quorumNumbers,
+		"",
+		true,
+	)
+	require.NoError(t, err)
+	require.NotNil(t, receipt)
+
+	select {
+	case newPubkeyRegistration := <-pubKeyRegistrations:
+		expectedOperator := crypto.PubkeyToAddress(ecdsaPrivateKey.PublicKey)
+		assert.Equal(t, expectedOperator, newPubkeyRegistration.Operator)
+	case <-time.After(10 * time.Second):
+		// Throw an error if the event is not received within 10 seconds, making the test fail
+		t.Fatal("Timed out waiting for NewPubkeyRegistration event")
+	}
+}

From ad12dc388b7a19ae006685d294a82449fd718139 Mon Sep 17 00:00:00 2001
From: Damian Ramirez <damian.ramirez@lambdaclass.com>
Date: Tue, 21 Jan 2025 17:26:31 -0300
Subject: [PATCH 2/4] Add test for SubscribeToOperatorSocketUpdates

---
 .../clients/avsregistry/subscriber_test.go    | 86 ++++++++++++-------
 1 file changed, 54 insertions(+), 32 deletions(-)

diff --git a/chainio/clients/avsregistry/subscriber_test.go b/chainio/clients/avsregistry/subscriber_test.go
index 87809bf4..464940ec 100644
--- a/chainio/clients/avsregistry/subscriber_test.go
+++ b/chainio/clients/avsregistry/subscriber_test.go
@@ -19,36 +19,58 @@ func TestSubscriberAvsRegistry(t *testing.T) {
 	chainSubscriber := client.AvsRegistryChainSubscriber
 	chainWriter := client.AvsRegistryChainWriter
 
-	pubKeyRegistrations, event, err := chainSubscriber.SubscribeToNewPubkeyRegistrations()
-	defer event.Unsubscribe()
-	require.NoError(t, err)
-
-	// Emit a NewPubkeyRegistration event creating a new operator
-	keypair, err := bls.NewKeyPairFromString("0x01")
-	require.NoError(t, err, "Failed to create BLS key pair")
-
-	ecdsaPrivateKey, err := crypto.HexToECDSA(testutils.ANVIL_FIRST_PRIVATE_KEY)
-	require.NoError(t, err, "Failed to parse ECDSA private key")
-
-	quorumNumbers := types.QuorumNums{0}
-
-	receipt, err := chainWriter.RegisterOperator(
-		context.Background(),
-		ecdsaPrivateKey,
-		keypair,
-		quorumNumbers,
-		"",
-		true,
-	)
-	require.NoError(t, err)
-	require.NotNil(t, receipt)
-
-	select {
-	case newPubkeyRegistration := <-pubKeyRegistrations:
-		expectedOperator := crypto.PubkeyToAddress(ecdsaPrivateKey.PublicKey)
-		assert.Equal(t, expectedOperator, newPubkeyRegistration.Operator)
-	case <-time.After(10 * time.Second):
-		// Throw an error if the event is not received within 10 seconds, making the test fail
-		t.Fatal("Timed out waiting for NewPubkeyRegistration event")
-	}
+	t.Run("subscribe to new pubkey registrations", func(t *testing.T) {
+		pubKeyRegistrationsC, event, err := chainSubscriber.SubscribeToNewPubkeyRegistrations()
+		defer event.Unsubscribe()
+		require.NoError(t, err)
+
+		// Emit a NewPubkeyRegistration event creating a new operator
+		keypair, err := bls.NewKeyPairFromString("0x01")
+		require.NoError(t, err, "Failed to create BLS key pair")
+
+		ecdsaPrivateKey, err := crypto.HexToECDSA(testutils.ANVIL_FIRST_PRIVATE_KEY)
+		require.NoError(t, err, "Failed to parse ECDSA private key")
+
+		quorumNumbers := types.QuorumNums{0}
+
+		receipt, err := chainWriter.RegisterOperator(
+			context.Background(),
+			ecdsaPrivateKey,
+			keypair,
+			quorumNumbers,
+			"",
+			true,
+		)
+		require.NoError(t, err)
+		require.NotNil(t, receipt)
+
+		select {
+		case newPubkeyRegistration := <-pubKeyRegistrationsC:
+			expectedOperator := crypto.PubkeyToAddress(ecdsaPrivateKey.PublicKey)
+			assert.Equal(t, expectedOperator, newPubkeyRegistration.Operator)
+		case <-time.After(10 * time.Second):
+			// Throw an error if the event is not received within 10 seconds, making the test fail
+			t.Fatal("Timed out waiting for NewPubkeyRegistration event")
+		}
+	})
+
+	t.Run("subscribe to operator socket updates", func(t *testing.T) {
+		socketC, event, err := chainSubscriber.SubscribeToOperatorSocketUpdates()
+		defer event.Unsubscribe()
+		require.NoError(t, err)
+
+		// Emit a SocketUpdate event
+		socketUpdate := "socket-update"
+		receipt, err := chainWriter.UpdateSocket(context.Background(), types.Socket(socketUpdate), true)
+		require.NoError(t, err)
+		require.NotNil(t, receipt)
+
+		select {
+		case operatorSocketUpdate := <-socketC:
+			assert.Equal(t, socketUpdate, operatorSocketUpdate.Socket)
+		case <-time.After(10 * time.Second):
+			// Throw an error if the event is not received within 10 seconds, making the test fail
+			t.Fatal("Timed out waiting for NewPubkeyRegistration event")
+		}
+	})
 }

From 500af3ceb014899d5cbea3e6b5a066622b1f56f6 Mon Sep 17 00:00:00 2001
From: Damian Ramirez <damian.ramirez@lambdaclass.com>
Date: Tue, 21 Jan 2025 17:28:45 -0300
Subject: [PATCH 3/4] Move defer after error check

---
 chainio/clients/avsregistry/subscriber_test.go | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/chainio/clients/avsregistry/subscriber_test.go b/chainio/clients/avsregistry/subscriber_test.go
index 464940ec..3d4448bf 100644
--- a/chainio/clients/avsregistry/subscriber_test.go
+++ b/chainio/clients/avsregistry/subscriber_test.go
@@ -21,15 +21,15 @@ func TestSubscriberAvsRegistry(t *testing.T) {
 
 	t.Run("subscribe to new pubkey registrations", func(t *testing.T) {
 		pubKeyRegistrationsC, event, err := chainSubscriber.SubscribeToNewPubkeyRegistrations()
-		defer event.Unsubscribe()
 		require.NoError(t, err)
+		defer event.Unsubscribe()
 
 		// Emit a NewPubkeyRegistration event creating a new operator
 		keypair, err := bls.NewKeyPairFromString("0x01")
-		require.NoError(t, err, "Failed to create BLS key pair")
+		require.NoError(t, err)
 
 		ecdsaPrivateKey, err := crypto.HexToECDSA(testutils.ANVIL_FIRST_PRIVATE_KEY)
-		require.NoError(t, err, "Failed to parse ECDSA private key")
+		require.NoError(t, err)
 
 		quorumNumbers := types.QuorumNums{0}
 
@@ -56,8 +56,8 @@ func TestSubscriberAvsRegistry(t *testing.T) {
 
 	t.Run("subscribe to operator socket updates", func(t *testing.T) {
 		socketC, event, err := chainSubscriber.SubscribeToOperatorSocketUpdates()
-		defer event.Unsubscribe()
 		require.NoError(t, err)
+		defer event.Unsubscribe()
 
 		// Emit a SocketUpdate event
 		socketUpdate := "socket-update"
@@ -70,7 +70,7 @@ func TestSubscriberAvsRegistry(t *testing.T) {
 			assert.Equal(t, socketUpdate, operatorSocketUpdate.Socket)
 		case <-time.After(10 * time.Second):
 			// Throw an error if the event is not received within 10 seconds, making the test fail
-			t.Fatal("Timed out waiting for NewPubkeyRegistration event")
+			t.Fatal("Timed out waiting for operatorSocketUpdate event")
 		}
 	})
 }

From 0d5cecb0c3edeed166b4120ed152cfc692a8481b Mon Sep 17 00:00:00 2001
From: Damian Ramirez <damian.ramirez@lambdaclass.com>
Date: Tue, 21 Jan 2025 17:46:38 -0300
Subject: [PATCH 4/4] Fix typo

---
 chainio/clients/avsregistry/subscriber_test.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/chainio/clients/avsregistry/subscriber_test.go b/chainio/clients/avsregistry/subscriber_test.go
index 3d4448bf..0cdf2aaa 100644
--- a/chainio/clients/avsregistry/subscriber_test.go
+++ b/chainio/clients/avsregistry/subscriber_test.go
@@ -70,7 +70,7 @@ func TestSubscriberAvsRegistry(t *testing.T) {
 			assert.Equal(t, socketUpdate, operatorSocketUpdate.Socket)
 		case <-time.After(10 * time.Second):
 			// Throw an error if the event is not received within 10 seconds, making the test fail
-			t.Fatal("Timed out waiting for operatorSocketUpdate event")
+			t.Fatal("Timed out waiting for OperatorSocketUpdate event")
 		}
 	})
 }