Skip to content

[N3] Neo-cli integration tests with expect ensuring that all 12 plugins are installed#967

Merged
vncoelho merged 15 commits intoneo-project:master-n3from
vncoelho:action-with-plugins
Jan 22, 2026
Merged

[N3] Neo-cli integration tests with expect ensuring that all 12 plugins are installed#967
vncoelho merged 15 commits intoneo-project:master-n3from
vncoelho:action-with-plugins

Conversation

@vncoelho
Copy link
Member

First draft for a expect that will ensure all Plugins are installed and running on the neo-cli.

It may need adjustments on configs and Plugins DLLS load conflicts.

@github-actions github-actions bot added the N3 label Jan 14, 2026
@vncoelho vncoelho mentioned this pull request Jan 14, 2026
@vncoelho
Copy link
Member Author

Run expect ./.github/workflows/test-neo-cli-plugins.expect
spawn dotnet out/neo-cli.dll
NEO-CLI v3.9.0  -  NEO v3.9.0  -  NEO-VM v3.9.0

Unhandled exception. System.TypeInitializationException: The type initializer for 'Neo.NeoSystem' threw an exception.
 ---> System.TypeLoadException: Could not load type 'Grpc.Core.ConnectivityState' from assembly 'Grpc.Net.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad'.
   at System.Reflection.RuntimeAssembly.GetExportedTypes()
   at Neo.Plugins.Plugin.LoadPlugin(Assembly assembly)
   at Neo.Plugins.Plugin.LoadPlugins()
   at Neo.NeoSystem..cctor()
   --- End of inner exception stack trace ---
   at Neo.NeoSystem.CurrentDomain_UnhandledException(Object sender, UnhandledExceptionEventArgs e)
   at System.AppContext.OnUnhandledException(Object e)
send: spawn id exp3 not open
    while executing
"send "plugins\n""
    (file "./.github/workflows/test-neo-cli-plugins.expect" line 20)
Error: Process completed with exit code 

Now the errors are correct I think, @shargon @superboyiii

This PR will save us a lot of time, now we will have all plugins loaded at least and client running without error

@vncoelho
Copy link
Member Author

It is working now!
@superboyiii

root@f0ba370cdcce:/workspace# ./.github/workflows/test-locally.sh 
=== Testing Test-with-plugins workflow steps locally ===

Step 1: Building solution (includes CLI and all plugins)...
Restore complete (8.6s)
  DBFTPlugin net10.0                                                                        ResolvePackageAssets (0.0s)
  RpcServer net10.0                                                                         ResolvePackageAssets (0.0s)
  Neo.CLI.Tests net10.0                                                                     ResolvePackageAssets (0.1s)
  RocksDBStore net10.0 succeeded (3.5s)plugins/RocksDBStore/bin/Release/net10.0/RocksDBStore.dll
  MPTTrie net10.0 succeeded (3.5s)plugins/MPTTrie/bin/Release/net10.0/MPTTrie.dll
  RpcClient net10.0 succeeded (3.5s)plugins/RpcClient/bin/Release/net10.0/RpcClient.dll
  LevelDBStore net10.0 succeeded (3.5s)plugins/LevelDBStore/bin/Release/net10.0/LevelDBStore.dll
  SQLiteWallet net10.0 succeeded (3.5s)plugins/SQLiteWallet/bin/Release/net10.0/SQLiteWallet.dll
  Neo.ConsoleService net10.0 succeeded (3.5s)src/Neo.ConsoleService/bin/Release/net10.0/Neo.ConsoleService.dll
  RpcServer net10.0 succeeded (3.6s)plugins/RpcServer/bin/Release/net10.0/RpcServer.dll
  RpcServer net10.0 succeeded (0.4s)plugins/RpcServer/bin/Release/net10.0/RpcServer.dll
  DBFTPlugin net10.0 succeeded (1.1s)plugins/DBFTPlugin/bin/Release/net10.0/DBFTPlugin.dll
  StateService net10.0 succeeded (1.2s)plugins/StateService/bin/Release/net10.0/StateService.dll
  Neo.ConsoleService.Tests net10.0 succeeded (1.2s)tests/Neo.ConsoleService.Tests/bin/Release/net10.0/Neo.ConsoleService.Tests.dll
  Neo.Plugins.Storage.Tests net10.0 succeeded (1.5s)tests/Neo.Plugins.Storage.Tests/bin/Release/net10.0/Neo.Plugins.Storage.Tests.dll
  StorageDumper net10.0 succeeded (1.5s)plugins/StorageDumper/bin/Release/net10.0/StorageDumper.dll
  Neo.Cryptography.MPTTrie.Tests net10.0 succeeded (1.7s)tests/Neo.Cryptography.MPTTrie.Tests/bin/Release/net10.0/Neo.Cryptography.MPTTrie.Tests.dll
  Neo.Plugins.SQLiteWallet.Tests net10.0 succeeded (1.6s)tests/Neo.Plugins.SQLiteWallet.Tests/bin/Release/net10.0/Neo.Plugins.SQLiteWallet.Tests.dll
  SignClient net10.0 succeeded (1.7s)plugins/SignClient/bin/Release/net10.0/SignClient.dll
  OracleService net10.0 succeeded (2.2s)plugins/OracleService/bin/Release/net10.0/OracleService.dll
  ApplicationLogs net10.0 succeeded (2.0s)plugins/ApplicationLogs/bin/Release/net10.0/ApplicationLogs.dll
  TokensTracker net10.0 succeeded (2.4s)plugins/TokensTracker/bin/Release/net10.0/TokensTracker.dll
  Neo.Plugins.StateService.Tests net10.0 succeeded (1.4s)tests/Neo.Plugins.StateService.Tests/bin/Release/net10.0/Neo.Plugins.StateService.Tests.dll
  Neo.Network.RPC.Tests net10.0 succeeded (2.6s)tests/Neo.Network.RPC.Tests/bin/Release/net10.0/Neo.Network.RPC.Tests.dll
  Neo.Plugins.DBFTPlugin.Tests net10.0 succeeded (1.9s)tests/Neo.Plugins.DBFTPlugin.Tests/bin/Release/net10.0/Neo.Plugins.DBFTPlugin.Tests.dll
  Neo.CLI net10.0 succeeded (3.0s)src/Neo.CLI/bin/Release/net10.0/neo-cli.dll
  Neo.Plugins.SignClient.Tests net10.0 succeeded (1.4s)tests/Neo.Plugins.SignClient.Tests/bin/Release/net10.0/Neo.Plugins.SignClient.Tests.dll
  Neo.Plugins.RpcServer.Tests net10.0 succeeded (3.0s)tests/Neo.Plugins.RpcServer.Tests/bin/Release/net10.0/Neo.Plugins.RpcServer.Tests.dll
  Neo.Plugins.OracleService.Tests net10.0 succeeded (1.1s)tests/Neo.Plugins.OracleService.Tests/bin/Release/net10.0/Neo.Plugins.OracleService.Tests.dll
  Neo.Plugins.ApplicationLogs.Tests net10.0 succeeded (0.9s)tests/Neo.Plugins.ApplicationLogs.Tests/bin/Release/net10.0/Neo.Plugins.ApplicationLogs.Tests.dll
  RestServer net10.0 succeeded (3.4s)plugins/RestServer/bin/Release/net10.0/RestServer.dll
  Neo.CLI.Tests net10.0 succeeded (0.9s)tests/Neo.CLI.Tests/bin/Release/net10.0/Neo.CLI.Tests.dll
  Neo.GUI net10.0-windows succeeded (1.1s)src/Neo.GUI/bin/Release/net10.0-windows/Neo.GUI.dll
  Neo.Plugins.RestServer.Tests net10.0 succeeded (1.0s)tests/Neo.Plugins.RestServer.Tests/bin/Release/net10.0/Neo.Plugins.RestServer.Tests.dll

Build succeeded in 16.5s
Restore complete (0.4s)
  Neo.ConsoleService net10.0 succeeded (0.1s)src/Neo.ConsoleService/bin/Release/net10.0/Neo.ConsoleService.dll
  Neo.CLI net10.0 succeeded (0.1s)out/

Build succeeded in 0.8s
✓ Build complete

Step 2: Creating Plugins folder and copying plugin DLLs...
  Copying ApplicationLogs DLLs...
  Copying DBFTPlugin DLLs...
  Copying LevelDBStore DLLs...
  Copying MPTTrie DLLs...
  Copying OracleService DLLs...
  Copying RestServer DLLs...
  Copying RocksDBStore DLLs...
  Copying RpcClient DLLs...
  Copying RpcServer DLLs...
  Copying SQLiteWallet DLLs...
  Copying SignClient DLLs...
  Copying StateService DLLs...
  Copying StorageDumper DLLs...
  Copying TokensTracker DLLs...
  Removing duplicated RpcServer.dll from TokensTracker and StorageDumper...Plugin DLLs copied

Step 3: Debug - Listing Plugins folder contents...
Plugins folder contents:
total 64
drwxr-xr-x 16 root root 4096 Jan 14 14:01 .
drwxr-xr-x 17 root root 4096 Jan 14 14:01 ..
drwxr-xr-x  3 root root 4096 Jan 14 14:01 ApplicationLogs
drwxr-xr-x  3 root root 4096 Jan 14 14:01 DBFTPlugin
drwxr-xr-x  3 root root 4096 Jan 14 14:01 LevelDBStore
drwxr-xr-x  3 root root 4096 Jan 14 14:01 MPTTrie
drwxr-xr-x  3 root root 4096 Jan 14 14:01 OracleService
drwxr-xr-x  3 root root 4096 Jan 14 14:01 RestServer
drwxr-xr-x  3 root root 4096 Jan 14 14:01 RocksDBStore
drwxr-xr-x  3 root root 4096 Jan 14 14:01 RpcClient
drwxr-xr-x  3 root root 4096 Jan 14 14:01 RpcServer
drwxr-xr-x  3 root root 4096 Jan 14 14:01 SQLiteWallet
drwxr-xr-x  3 root root 4096 Jan 14 14:01 SignClient
drwxr-xr-x  3 root root 4096 Jan 14 14:01 StateService
drwxr-xr-x  3 root root 4096 Jan 14 14:01 StorageDumper
drwxr-xr-x  3 root root 4096 Jan 14 14:01 TokensTracker

Plugin directories:
./out/Plugins/ApplicationLogs
./out/Plugins/DBFTPlugin
./out/Plugins/LevelDBStore
./out/Plugins/MPTTrie
./out/Plugins/OracleService
./out/Plugins/RestServer
./out/Plugins/RocksDBStore
./out/Plugins/RpcClient
./out/Plugins/RpcServer
./out/Plugins/SQLiteWallet
./out/Plugins/SignClient
./out/Plugins/StateService
./out/Plugins/StorageDumper
./out/Plugins/TokensTracker

Sample plugin DLLs (ApplicationLogs):
-rwxr--r-- 1 root root  932352 Jan 14 14:01 ./out/Plugins/ApplicationLogs/Akka.dll
-rw-r--r-- 1 root root   48640 Jan 14 14:01 ./out/Plugins/ApplicationLogs/ApplicationLogs.dll
-rwxr--r-- 1 root root 4924576 Jan 14 14:01 ./out/Plugins/ApplicationLogs/BouncyCastle.Cryptography.dll
-rwxr--r-- 1 root root   70656 Jan 14 14:01 ./out/Plugins/ApplicationLogs/K4os.Compression.LZ4.dll
-rwxr--r-- 1 root root   19504 Jan 14 14:01 ./out/Plugins/ApplicationLogs/Microsoft.IdentityModel.Abstractions.dll

Step 4: Checking dependencies...
  expect already installed

Step 5: Running expect test...
spawn dotnet out/neo-cli.dll
NEO-CLI v3.9.0  -  NEO v3.9.0  -  NEO-VM v3.9.0

neo> plugins
plugins

[Installed]      ApplicationLogs  @3.9.0  Synchronizes smart contract VM executions and notifications (NotifyLog) on blockchain.
[Installed]      DBFTPlugin       @3.9.0  Consensus plugin with dBFT algorithm.
[Installed]      LevelDBStore     @3.9.0  Uses LevelDB to store the blockchain data
[Installed]      OracleService    @3.9.0  Built-in oracle plugin
[Installed]      RestServer       @3.9.0  Enables REST Web Services for the node
[Installed]      RocksDBStore     @3.9.0  Uses RocksDBStore to store the blockchain data
[Installed]      RpcServer        @3.9.0  Enables RPC for the node
[Installed]      SignClient       @3.9.0  Signer plugin for signer service.
[Installed]      SQLiteWallet     @3.9.0  A SQLite-based wallet provider that supports wallet files with .db3 suffix.
[Installed]      StateService     @3.9.0  Enables MPT for the node
[Installed]      StorageDumper    @3.9.0  Exports Neo-CLI status data
[Installed]      TokensTracker    @3.9.0  Enquiries balances and transaction history of accounts through RPC
neo> ✓ Expect test complete

=== All tests completed successfully ===
root@f0ba370cdcce:/workspace# 

This UT is very important for ensuring consistency of all plugins installed. It should be merged asap.

@vncoelho
Copy link
Member Author

Ready to merge @shargon @superboyiii

@vncoelho vncoelho changed the title [N3] Expect with all plugins installed [N3] Neo-cli integration tests with expect ensuring all 12 plugins are installed Jan 14, 2026
@vncoelho vncoelho changed the title [N3] Neo-cli integration tests with expect ensuring all 12 plugins are installed [N3] Neo-cli integration tests with expect ensuring that all 12 plugins are installed Jan 14, 2026
@vncoelho
Copy link
Member Author

@shargon, I removed format and also removed the check for linux

@vncoelho
Copy link
Member Author

@ajara87 @shargon @snowypowers , last UTs after Alvaro merged are return errors on actions.

@coveralls
Copy link

coveralls commented Jan 21, 2026

Pull Request Test Coverage Report for Build 21239024114

Details

  • 0 of 0 changed or added relevant lines in 0 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage remained the same at 38.972%

Totals Coverage Status
Change from base Build 21235517840: 0.0%
Covered Lines: 7076
Relevant Lines: 16838

💛 - Coveralls

@vncoelho vncoelho merged commit 04f30bb into neo-project:master-n3 Jan 22, 2026
5 checks passed
@vncoelho vncoelho deleted the action-with-plugins branch January 22, 2026 12:52
@vncoelho
Copy link
Member Author

I think that I will not port it to N4 for now because that branch may still be more unstable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants