github.com/kotalco/kotal@v0.3.0/clients/ethereum/nethermind_client_test.go (about)

     1  package ethereum
     2  
     3  import (
     4  	"fmt"
     5  
     6  	ethereumv1alpha1 "github.com/kotalco/kotal/apis/ethereum/v1alpha1"
     7  	sharedAPI "github.com/kotalco/kotal/apis/shared"
     8  	"github.com/kotalco/kotal/controllers/shared"
     9  	. "github.com/onsi/ginkgo/v2"
    10  	. "github.com/onsi/gomega"
    11  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    12  )
    13  
    14  var _ = Describe("Nethermind Client", func() {
    15  
    16  	enode := ethereumv1alpha1.Enode("enode://2281549869465d98e90cebc45e1d6834a01465a990add7bcf07a49287e7e66b50ca27f9c70a46190cef7ad746dd5d5b6b9dfee0c9954104c8e9bd0d42758ec58@10.5.0.2:30300")
    17  	coinbase := "0x5A0b54D5dc17e0AadC383d2db43B0a0D3E029c4c"
    18  
    19  	Context("general", func() {
    20  		node := &ethereumv1alpha1.Node{
    21  			ObjectMeta: metav1.ObjectMeta{
    22  				Name: "gneral",
    23  			},
    24  			Spec: ethereumv1alpha1.NodeSpec{
    25  				Client: ethereumv1alpha1.NethermindClient,
    26  				StaticNodes: []ethereumv1alpha1.Enode{
    27  					enode,
    28  				},
    29  			},
    30  		}
    31  		client, _ := NewClient(node)
    32  
    33  		It("should return correct home directory", func() {
    34  			Expect(client.HomeDir()).To(Equal(NethermindHomeDir))
    35  		})
    36  
    37  		It("should encode static nodes correctly", func() {
    38  			Expect(client.EncodeStaticNodes()).To(Equal(fmt.Sprintf("[\"%s\"]", string(enode))))
    39  		})
    40  	})
    41  
    42  	Context("Joining mainnet", func() {
    43  		node := ethereumv1alpha1.Node{
    44  			ObjectMeta: metav1.ObjectMeta{
    45  				Name: "nethermind-mainnet-node",
    46  			},
    47  			Spec: ethereumv1alpha1.NodeSpec{
    48  				Client:                   ethereumv1alpha1.NethermindClient,
    49  				Network:                  ethereumv1alpha1.MainNetwork,
    50  				NodePrivateKeySecretName: "mainnet-nethermind-nodekey",
    51  				Logging:                  sharedAPI.WarnLogs,
    52  				RPC:                      true,
    53  				RPCPort:                  8799,
    54  				RPCAPI: []ethereumv1alpha1.API{
    55  					ethereumv1alpha1.AdminAPI,
    56  					ethereumv1alpha1.NetworkAPI,
    57  				},
    58  				Engine:        true,
    59  				EnginePort:    8552,
    60  				JWTSecretName: "jwt-secret",
    61  				P2PPort:       30306,
    62  				WS:            true,
    63  				WSPort:        30307,
    64  				SyncMode:      ethereumv1alpha1.FastSynchronization,
    65  				StaticNodes: []ethereumv1alpha1.Enode{
    66  					enode,
    67  				},
    68  			},
    69  		}
    70  
    71  		node.Default()
    72  
    73  		It("Should generate correct args", func() {
    74  			client, err := NewClient(&node)
    75  
    76  			Expect(err).To(BeNil())
    77  			Expect(client.Args()).To(ContainElements(
    78  				NethermindNodePrivateKey,
    79  				fmt.Sprintf("%s/kotal_nodekey", shared.PathData(client.HomeDir())),
    80  				NethermindStaticNodesFile,
    81  				fmt.Sprintf("%s/static-nodes.json", shared.PathConfig(client.HomeDir())),
    82  				NethermindDataPath,
    83  				shared.PathData(client.HomeDir()),
    84  				NethermindNetwork,
    85  				node.Spec.Network,
    86  				NethermindP2PPort,
    87  				"30306",
    88  				NethermindFastSync,
    89  				"true",
    90  				NethermindFastBlocks,
    91  				"true",
    92  				NethermindDownloadBodiesInFastSync,
    93  				"true",
    94  				NethermindDownloadReceiptsInFastSync,
    95  				"true",
    96  				NethermindRPCHTTPEnabled,
    97  				"true",
    98  				NethermindRPCHTTPHost,
    99  				"0.0.0.0",
   100  				NethermindRPCHTTPPort,
   101  				"8799",
   102  				NethermindRPCHTTPAPI,
   103  				"admin,net",
   104  				NethermindRPCEnginePort,
   105  				"8552",
   106  				NethermindRPCEngineHost,
   107  				"0.0.0.0",
   108  				NethermindRPCJwtSecretFile,
   109  				fmt.Sprintf("%s/jwt.secret", shared.PathSecrets(client.HomeDir())),
   110  				NethermindRPCWSEnabled,
   111  				"true",
   112  				NethermindRPCWSPort,
   113  				"30307",
   114  			))
   115  
   116  		})
   117  
   118  	})
   119  
   120  	Context("miner in private PoW network", func() {
   121  		node := &ethereumv1alpha1.Node{
   122  			ObjectMeta: metav1.ObjectMeta{
   123  				Name: "nethermind-pow-node",
   124  			},
   125  			Spec: ethereumv1alpha1.NodeSpec{
   126  				Genesis: &ethereumv1alpha1.Genesis{
   127  					ChainID:   12345,
   128  					NetworkID: 12345,
   129  					Ethash:    &ethereumv1alpha1.Ethash{},
   130  				},
   131  				Client:   ethereumv1alpha1.NethermindClient,
   132  				Miner:    true,
   133  				Coinbase: sharedAPI.EthereumAddress(coinbase),
   134  				Import: &ethereumv1alpha1.ImportedAccount{
   135  					PrivateKeySecretName: "nethermind-pow-account-key",
   136  					PasswordSecretName:   "nethermind-pow-account-password",
   137  				},
   138  			},
   139  		}
   140  		node.Default()
   141  
   142  		It("should generate correct arguments", func() {
   143  
   144  			client, err := NewClient(node)
   145  
   146  			Expect(err).To(BeNil())
   147  			Expect(client.Args()).To(ContainElements(
   148  				NethermindMiningEnabled,
   149  				"true",
   150  				NethermindMinerCoinbase,
   151  				coinbase,
   152  				NethermindUnlockAccounts,
   153  				fmt.Sprintf("[%s]", coinbase),
   154  				NethermindPasswordFiles,
   155  				fmt.Sprintf("[%s/account.password]", shared.PathSecrets(client.HomeDir())),
   156  				NethermindDiscoveryEnabled,
   157  				"false",
   158  				NethermindNetwork,
   159  				fmt.Sprintf("%s/empty.cfg", shared.PathConfig(client.HomeDir())),
   160  			))
   161  		})
   162  
   163  	})
   164  
   165  	Context("signer in private PoA network", func() {
   166  		node := &ethereumv1alpha1.Node{
   167  			ObjectMeta: metav1.ObjectMeta{
   168  				Name: "nethermind-poa-node",
   169  			},
   170  			Spec: ethereumv1alpha1.NodeSpec{
   171  				Genesis: &ethereumv1alpha1.Genesis{
   172  					ChainID:   12345,
   173  					NetworkID: 12345,
   174  					Clique: &ethereumv1alpha1.Clique{
   175  						Signers: []sharedAPI.EthereumAddress{
   176  							"0xcF2C3fB8F36A863FD1A8c72E2473f81744B4CA6C",
   177  							"0x1990E5760d9f8Ae0ec55dF8B0819C77e59846Ff2",
   178  							"0xB87c1c66b36D98D1A74a9875EbA12c001e0bcEda",
   179  						},
   180  					},
   181  				},
   182  				Client:   ethereumv1alpha1.NethermindClient,
   183  				Miner:    true,
   184  				Coinbase: sharedAPI.EthereumAddress(coinbase),
   185  				Import: &ethereumv1alpha1.ImportedAccount{
   186  					PrivateKeySecretName: "nethermind-poa-account-key",
   187  					PasswordSecretName:   "nethermind-poa-account-password",
   188  				},
   189  			},
   190  		}
   191  		node.Default()
   192  
   193  		It("should generate correct arguments", func() {
   194  
   195  			client, err := NewClient(node)
   196  
   197  			Expect(err).To(BeNil())
   198  			Expect(client.Args()).To(ContainElements(
   199  				NethermindMiningEnabled,
   200  				"true",
   201  				NethermindMinerCoinbase,
   202  				coinbase,
   203  				NethermindUnlockAccounts,
   204  				fmt.Sprintf("[%s]", coinbase),
   205  				NethermindPasswordFiles,
   206  				fmt.Sprintf("[%s/account.password]", shared.PathSecrets(client.HomeDir())),
   207  				NethermindDiscoveryEnabled,
   208  				"false",
   209  				NethermindNetwork,
   210  				fmt.Sprintf("%s/empty.cfg", shared.PathConfig(client.HomeDir())),
   211  			))
   212  		})
   213  
   214  	})
   215  
   216  })