Skip to content

Port the conformance plugin to Scala 3 and dnp4s main - #453

Merged
jadamcrain merged 1 commit into
mainfrom
conformance-scala3
Oct 10, 2026
Merged

jadamcrain merged 1 commit into
mainfrom
conformance-scala3

Conversation

@jadamcrain

Copy link
Copy Markdown
Member

dnp4s main is now Scala 3 (3.9 LTS), and its procedures were audited against the DNP3 IED Level 2 test procedures (stepfunc/dnp4s#22). This moves the conformance job off the scala-2.13 branch and onto main.

Changes

  • pom.xml: Scala 3.9.0 and scala-maven-plugin 4.10.0. The plugin source compiles unchanged.
  • Implement the new IntegrationPlugin methods:
    • generateExactClassEvents uses the existing exact binary input, counter and analog input generators for classes 1, 2 and 3.
    • reinstallPoints clears the uninstall flags and restarts the outstation.
  • Remote supervisory control is now switched to local at runtime. The plugin sets the Local Control IIN and updates the binary output flags in the live database instead of restarting the outstation. 8.6.4.2 and 8.6.4.3 no longer cycle power after changing the switch, because the procedures don't ask for it, so a restart dropped the harness connection.
  • device.ini: set timesync.maxTimeBetweenSyncRequestsMs = 5000. Step 23 of 8.15.2 now waits this interval rather than maxTimeFromResetToIIN14Ms.
  • CI checks out dnp4s at main instead of scala-2.13.

Results

I ran the suite locally against the old and new dnp4s. The results are identical: 142 procedures pass, 11 are skipped and none fail.

dnp4s main is now Scala 3 and its procedures were audited against the
DNP3 Level 2 test procedures. Build the plugin against it:

- Scala 3.9.0 and scala-maven-plugin 4.10.0
- implement the new IntegrationPlugin methods generateExactClassEvents
  and reinstallPoints
- switch remote supervisory control to local at runtime instead of
  restarting the outstation; 8.6.4.2 and 8.6.4.3 no longer cycle power
  after changing the switch, so a restart dropped the harness connection
- set timesync.maxTimeBetweenSyncRequestsMs, which 8.15.2 now waits
- check out dnp4s main in CI instead of the scala-2.13 branch

Results are unchanged: 142 procedures pass and 11 are skipped, the same
as with the scala-2.13 branch.
@jadamcrain
jadamcrain merged commit f062ac8 into main Oct 10, 2026
34 checks passed
@jadamcrain
jadamcrain deleted the conformance-scala3 branch October 10, 2026 07:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant