[N3] Neo-cli integration tests with expect ensuring that all 12 plugins are installed#967
Merged
vncoelho merged 15 commits intoneo-project:master-n3from Jan 22, 2026
Merged
Conversation
vncoelho
commented
Jan 14, 2026
vncoelho
commented
Jan 14, 2026
Merged
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 |
Member
Author
|
It is working now! 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. |
Member
Author
|
Ready to merge @shargon @superboyiii |
shargon
reviewed
Jan 14, 2026
Member
Author
|
@shargon, I removed format and also removed the check for linux |
Member
Author
|
@ajara87 @shargon @snowypowers , last UTs after Alvaro merged are return errors on actions. |
Pull Request Test Coverage Report for Build 21239024114Details
💛 - Coveralls |
ajara87
approved these changes
Jan 21, 2026
shargon
approved these changes
Jan 22, 2026
Member
Author
|
I think that I will not port it to N4 for now because that branch may still be more unstable. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.