device-management-toolkit / device-management-toolkit/sample-web-ui

SOL: "Disconnect SOL" button never flips back to "Connect SOL" after manual disconnect

Open
#3,475 2 comments 0 reactions 1 assignee View on GitHub

@DevipriyaS17 is already working on this.

Since Sep 15, 2026.

P2
Dominant language
TypeScript
Stars
13
Forks
19
Avg merge
1d 1h
Merged PRs (30d)
49

Description

Summary

After clicking Disconnect SOL on the SOL (Serial-over-LAN) tab, the redirection session is correctly torn down (the <amt-sol> terminal unmounts), but the toolbar button remains labeled "Disconnect SOL" instead of flipping back to "Connect SOL". This makes it impossible to manually reconnect via the button after a manual disconnect — the user has to navigate away and back to the SOL tab to reconnect.

Image

Found while writing e2e coverage for the SOL feature against a real AMT device (device-management-toolkit/e2e-testing); confirmed as a deterministic logic bug (not a timing flake) by reading the component/template source, and reproduced live against real hardware.

Steps to reproduce

  1. Open a device's SOL tab (SOL auto-connects on load).
  2. Wait for the terminal to connect (button shows "Disconnect SOL").
  3. Click Disconnect SOL.

Expected: the button flips to "Connect SOL" (matching the equivalent KVM behavior).
Actual: the button still reads "Disconnect SOL", even though the terminal/session is actually disconnected.

Root cause

In sol.component.ts:

disconnect(): void {
  this.isDisconnecting = true
  this.deviceConnection.set(false)
}

deviceStatus(event: any): void {
  this.deviceState.set(event)
  if (event === 3) {
    this.isLoading.set(false)
  } else if (event === 0) {
    this.isLoading.set(false)
    if (!this.isDisconnecting) {
      this.displayError(
        'Connecting to SOL failed. Only one session per device is allowed. Also ensure that your token is valid and you have access.'
      )
    }
    this.isDisconnecting = false
  }
}

When the child <amt-sol> reports deviceStatus(0) (disconnected), isLoading is set to false. But in sol.component.html, the "Connect SOL" button condition is:

@if (deviceState() === 0 && isLoading() !== false) {
  <!-- Connect SOL -->
} @else if (deviceState() !== 2 && isLoading()) {
  <!-- Loading -->
} @else {
  <!-- Disconnect SOL -->
}

deviceState() === 0 && isLoading() !== false can never be true at the moment a real disconnect completes, because isLoading was just explicitly set to false in the same deviceStatus(0) branch that set deviceState to 0. So the button always falls through to the @else branch ("Disconnect SOL") after a disconnect.

Comparison with KVM (which does not have this bug)

The equivalent KVM button condition in kvm.component.html additionally checks the connection flag itself, not just deviceState/isLoading:

@if ((deviceState() === 0 || !deviceKVMConnection()) && !isLoading()) {
  <!-- Connect KVM -->
}

The || !deviceKVMConnection() clause is what makes KVM's button correctly flip back to "Connect KVM" after a manual disconnect. SOL's template is missing the equivalent || !deviceConnection() clause.

Suggested fix

Add the same || !deviceConnection() clause to the SOL "Connect SOL" condition in sol.component.html, mirroring the KVM pattern:

@if ((deviceState() === 0 || !deviceConnection()) && isLoading() !== false) {

(Exact boolean form to be reconciled with the second/loading branch during implementation — the key point is a manual disconnect should be reflected via deviceConnection() as well as deviceState().)

Environment

  • Confirmed on sample-web-ui enterprise build talking to Console, against a real Intel AMT device (Admin Control Mode, AMT 18.1.x).
  • Not timing-dependent — reproduces on every manual disconnect.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.