0

Diagnostics: Wire up NetworkListObserver in network-list

- Implements NetworkListObserver.onNetworkListChanged in network list
- Displays active guid in the connectivity card
- Adds tests to network list that ensure that the active guid is present
in the connectivity card
- Adds FakeNetworkHealthProvider to the mojo_interface_provider
- Updates mojo test to include NetworkHealthProvider

Bug: 1125150
Test: browser_tests --gtest_filter=DiagnosticsApp*
Change-Id: I349ffeb6d384f08d4d5b900f8de2659bf47e962f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2844821
Reviewed-by: Zentaro Kavanagh <zentaro@chromium.org>
Commit-Queue: Michael Checo <michaelcheco@google.com>
Cr-Commit-Position: refs/heads/master@{#878000}
This commit is contained in:
Michael Checo
2021-04-30 18:21:04 +00:00
committed by Chromium LUCI CQ
parent f851e59c82
commit e77c5edeed
9 changed files with 152 additions and 9 deletions

@ -186,6 +186,7 @@ js_library("mojo_interface_provider_test") {
deps = [
"../..:chai_assert",
"//chromeos/components/diagnostics_ui/resources:diagnostics_types",
"//chromeos/components/diagnostics_ui/resources:fake_network_health_provider",
"//chromeos/components/diagnostics_ui/resources:fake_system_routine_controller",
"//chromeos/components/diagnostics_ui/resources:mojo_interface_provider",
]
@ -195,6 +196,10 @@ js_library("network_list_test") {
deps = [
"../..:chai_assert",
"../..:test_util.m",
"//chromeos/components/diagnostics_ui/resources:diagnostics_types",
"//chromeos/components/diagnostics_ui/resources:fake_data",
"//chromeos/components/diagnostics_ui/resources:fake_network_health_provider",
"//chromeos/components/diagnostics_ui/resources:mojo_interface_provider",
"//chromeos/components/diagnostics_ui/resources:network_list",
]
externs_list = [ "$externs_path/mocha-2.5.js" ]

@ -3,9 +3,10 @@
// found in the LICENSE file.
import {SystemDataProviderInterface} from 'chrome://diagnostics/diagnostics_types.js';
import {FakeNetworkHealthProvider} from 'chrome://diagnostics/fake_network_health_provider.js';
import {FakeSystemDataProvider} from 'chrome://diagnostics/fake_system_data_provider.js';
import {FakeSystemRoutineController} from 'chrome://diagnostics/fake_system_routine_controller.js';
import {getSystemDataProvider, getSystemRoutineController, setSystemDataProviderForTesting, setSystemRoutineControllerForTesting} from 'chrome://diagnostics/mojo_interface_provider.js';
import {getNetworkHealthProvider, getSystemDataProvider, getSystemRoutineController, setNetworkHealthProviderForTesting, setSystemDataProviderForTesting, setSystemRoutineControllerForTesting} from 'chrome://diagnostics/mojo_interface_provider.js';
import {assertEquals} from '../../chai_assert.js';
@ -21,4 +22,10 @@ export function fakeMojoProviderTestSuite() {
setSystemRoutineControllerForTesting(fake_controller);
assertEquals(fake_controller, getSystemRoutineController());
});
test('SettingGettingTestNetworkHealthProvider', () => {
let fake_provider = new FakeNetworkHealthProvider();
setNetworkHealthProviderForTesting(fake_provider);
assertEquals(fake_provider, getNetworkHealthProvider());
});
}

@ -4,6 +4,11 @@
import 'chrome://diagnostics/network_list.js';
import {NetworkGuidInfo} from 'chrome://diagnostics/diagnostics_types.js';
import {fakeNetworkGuidInfoList} from 'chrome://diagnostics/fake_data.js';
import {FakeNetworkHealthProvider} from 'chrome://diagnostics/fake_network_health_provider.js';
import {setNetworkHealthProviderForTesting} from 'chrome://diagnostics/mojo_interface_provider.js';
import {assertFalse, assertTrue} from '../../chai_assert.js';
import {flushTasks} from '../../test_util.m.js';
@ -13,6 +18,14 @@ export function networkListTestSuite() {
/** @type {?NetworkListElement} */
let networkListElement = null;
/** @type {?FakeNetworkHealthProvider} */
let provider = null;
suiteSetup(() => {
provider = new FakeNetworkHealthProvider();
setNetworkHealthProviderForTesting(provider);
});
setup(() => {
document.body.innerHTML = '';
});
@ -20,10 +33,15 @@ export function networkListTestSuite() {
teardown(() => {
networkListElement.remove();
networkListElement = null;
provider.reset();
});
function initializeNetworkList() {
/**
* @param {!Array<!NetworkGuidInfo>} fakeNetworkGuidInfoList
*/
function initializeNetworkList(fakeNetworkGuidInfoList) {
assertFalse(!!networkListElement);
provider.setFakeNetworkGuidInfo(fakeNetworkGuidInfoList);
// Add the network list to the DOM.
networkListElement = /** @type {!NetworkListElement} */ (
@ -46,8 +64,34 @@ export function networkListTestSuite() {
return connectivityCard;
}
test('ConnectivityCardInitialized', () => {
return initializeNetworkList().then(
() => assertTrue(!!getConnectivityCard()));
/**
* Causes the network list observer to fire.
*/
function triggerNetworkListObserver() {
provider.triggerNetworkListObserver();
return flushTasks();
}
test('ActiveGuidPresent', () => {
// The network-list element sets up a NetworkListObserver as part
// of its initialization. Registering this observer causes it to
// fire once.
return initializeNetworkList(fakeNetworkGuidInfoList).then(() => {
dx_utils.assertElementContainsText(
getConnectivityCard().$$('#activeGuid'),
/** @type {string} */ (fakeNetworkGuidInfoList[0].activeGuid));
});
});
test('ActiveGuidUpdates', () => {
return initializeNetworkList(fakeNetworkGuidInfoList)
.then(() => triggerNetworkListObserver())
.then(() => {
// Triggering the NetworkListObserver provides
// the second observation: fakeNetworkGuidInfoList[1].
dx_utils.assertElementContainsText(
getConnectivityCard().$$('#activeGuid'),
/** @type {string} */ (fakeNetworkGuidInfoList[1].activeGuid));
});
});
}

@ -174,6 +174,7 @@ js_library("mojo_utils") {
js_library("network_list") {
deps = [
":connectivity_card",
":diagnostics_types",
":mojo_interface_provider",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
]

@ -1,9 +1,10 @@
<style include="diagnostics-shared diagnostics-fonts">
</style>
<diagnostics-card hide-data-points="true">
<diagnostics-card>
<!-- TODO(michaelcheco): Add localized strings. -->
<div id="cardTitle" slot="title">Connectivity</div>
<div id="activeGuid" slot="body">[[activeGuid]]</div>
<routine-section slot="routines" routines="[[routines_]]"
is-test-running="{{isTestRunning}}"
run-tests-button-text="Run Network test"

@ -46,6 +46,12 @@ Polymer({
chromeos.diagnostics.mojom.RoutineType.kSignalStrength,
],
},
/** @type {string} */
activeGuid: {
type: String,
value: '',
},
},
/** @protected */

@ -10,8 +10,9 @@ import './system_routine_controller.mojom-lite.js';
import {assert} from 'chrome://resources/js/assert.m.js';
import {PowerRoutineResult, RoutineType, StandardRoutineResult, SystemDataProviderInterface, SystemInfo, SystemRoutineControllerInterface} from './diagnostics_types.js';
import {fakeBatteryChargeStatus, fakeBatteryHealth, fakeBatteryInfo, fakeCpuUsage, fakeMemoryUsage, fakePowerRoutineResults, fakeRoutineResults, fakeSystemInfo} from './fake_data.js';
import {NetworkHealthProviderInterface, PowerRoutineResult, RoutineType, StandardRoutineResult, SystemDataProviderInterface, SystemInfo, SystemRoutineControllerInterface} from './diagnostics_types.js';
import {fakeAllNetworksAvailable, fakeBatteryChargeStatus, fakeBatteryHealth, fakeBatteryInfo, fakeCpuUsage, fakeMemoryUsage, fakePowerRoutineResults, fakeRoutineResults, fakeSystemInfo} from './fake_data.js';
import {FakeNetworkHealthProvider} from './fake_network_health_provider.js';
import {FakeSystemDataProvider} from './fake_system_data_provider.js';
import {FakeSystemRoutineController} from './fake_system_routine_controller.js';
@ -31,6 +32,11 @@ let systemDataProvider = null;
*/
let systemRoutineController = null;
/**
* @type {?NetworkHealthProviderInterface}
*/
let networkHealthProvider = null;
/**
* @param {!SystemDataProviderInterface} testProvider
*/
@ -70,3 +76,31 @@ export function getSystemRoutineController() {
assert(!!systemRoutineController);
return systemRoutineController;
}
/**
* @param {!NetworkHealthProviderInterface} testProvider
*/
export function setNetworkHealthProviderForTesting(testProvider) {
networkHealthProvider = testProvider;
}
function setupFakeNetworkHealthProvider_() {
const provider = new FakeNetworkHealthProvider();
// The fake provides a stable state with all networks connected.
provider.setFakeNetworkGuidInfo([fakeAllNetworksAvailable]);
setNetworkHealthProviderForTesting(provider);
}
/**
* @return {!NetworkHealthProviderInterface}
*/
export function getNetworkHealthProvider() {
if (!networkHealthProvider) {
// TODO(michaelcheco): Instantiate a real mojo interface here.
setupFakeNetworkHealthProvider_();
}
assert(!!networkHealthProvider);
return networkHealthProvider;
}

@ -5,7 +5,7 @@
</style>
<div id="networkListContainer">
<connectivity-card id="connectivityCard"
<connectivity-card id="connectivityCard" active-guid="[[activeGuid_]]"
is-test-running="{{isTestRunning}}">
</connectivity-card>
</div>

@ -8,6 +8,9 @@ import './diagnostics_shared_css.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {NetworkGuidInfo, NetworkHealthProviderInterface} from './diagnostics_types.js'
import {getNetworkHealthProvider} from './mojo_interface_provider.js';
/**
* @fileoverview
* 'network-list' is responsible for displaying Ethernet, Cellular,
@ -18,6 +21,11 @@ Polymer({
_template: html`{__html_template__}`,
/**
* @private {?NetworkHealthProviderInterface}
*/
networkHealthProvider_: null,
properties: {
/** @type {boolean} */
isTestRunning: {
@ -25,5 +33,42 @@ Polymer({
value: false,
notify: true,
},
/** @private {Array<?string>} */
otherNetworkGuids_: {
type: Array,
value: () => [],
},
/** @private {string} */
activeGuid_: {
type: String,
value: '',
},
},
/** @override */
created() {
this.networkHealthProvider_ = getNetworkHealthProvider();
this.observeNetworkList_();
},
/** @private */
observeNetworkList_() {
// Calling observeNetworkList will trigger onNetworkListChanged.
this.networkHealthProvider_.observeNetworkList(this);
},
/**
* Implements NetworkListObserver.onNetworkListChanged
* @param {!NetworkGuidInfo} networkGuidInfo
*/
onNetworkListChanged(networkGuidInfo) {
// The connectivity-card is responsible for displaying the active network
// so we need to filter out the activeGuid to avoid displaying a
// a network-info card for it.
this.otherNetworkGuids_ = networkGuidInfo.networkGuids.filter(
guid => guid !== networkGuidInfo.activeGuid);
this.activeGuid_ = networkGuidInfo.activeGuid || '';
},
});