# HG changeset patch # User Elliott Baron # Date 1548709225 18000 # Mon Jan 28 16:00:25 2019 -0500 # Node ID 3b41434814e5a543322ee79472095eda95718c04 # Parent 0fb79343c66cb4fc8d6dc0a6849a21d59011914f JMC-6211: Restore Defaults button doesn't revert username and password in Preferences Summary: Reset mail server user credentials to blank values when reverting to defaults Reviewed-by: Contributed-by: Elliott Baron diff --git a/application/org.openjdk.jmc.console.ui/META-INF/MANIFEST.MF b/application/org.openjdk.jmc.console.ui/META-INF/MANIFEST.MF --- a/application/org.openjdk.jmc.console.ui/META-INF/MANIFEST.MF +++ b/application/org.openjdk.jmc.console.ui/META-INF/MANIFEST.MF @@ -20,7 +20,9 @@ org.openjdk.jmc.console.ui.mbeanbrowser, org.openjdk.jmc.console.ui.notification", org.openjdk.jmc.console.ui.editor, - org.openjdk.jmc.console.ui.editor.internal;x-friends:="org.openjdk.jmc.console.ui.mbeanbrowser,org.openjdk.jmc.rcp.intro" + org.openjdk.jmc.console.ui.editor.internal;x-friends:="org.openjdk.jmc.console.ui.mbeanbrowser,org.openjdk.jmc.rcp.intro", + org.openjdk.jmc.console.ui.messages.internal;x-friends:="org.openjdk.jmc.console.uitest", + org.openjdk.jmc.console.ui.preferences;x-friends:="org.openjdk.jmc.console.uitest" Bundle-ClassPath: . Import-Package: javax.annotation;version="1.0.0", javax.inject;version="1.0.0" diff --git a/application/org.openjdk.jmc.console.ui/src/main/java/org/openjdk/jmc/console/ui/preferences/CommunicationPage.java b/application/org.openjdk.jmc.console.ui/src/main/java/org/openjdk/jmc/console/ui/preferences/CommunicationPage.java --- a/application/org.openjdk.jmc.console.ui/src/main/java/org/openjdk/jmc/console/ui/preferences/CommunicationPage.java +++ b/application/org.openjdk.jmc.console.ui/src/main/java/org/openjdk/jmc/console/ui/preferences/CommunicationPage.java @@ -45,6 +45,7 @@ import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; @@ -65,6 +66,14 @@ * Preference dialog responsible for communications settings */ public class CommunicationPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { + public static final String TEXT_FIELD_NAME_KEY = "name"; //$NON-NLS-1$ + public static final String UPDATE_INTERVAL_FIELD_NAME = "preference.communication.text.interval"; //$NON-NLS-1$ + public static final String RETAINED_EVENT_FIELD_NAME = "preference.communication.text.retained"; //$NON-NLS-1$ + public static final String SERVER_HOST_FIELD_NAME = "preference.communication.text.host"; //$NON-NLS-1$ + public static final String SERVER_PORT_FIELD_NAME = "preference.communication.text.port"; //$NON-NLS-1$ + public static final String USERNAME_FIELD_NAME = "preference.communication.text.username"; //$NON-NLS-1$ + public static final String PASSWORD_FIELD_NAME = "preference.communication.text.password"; //$NON-NLS-1$ + private IntFieldEditor mailServerPort; private Text userField; private Text passwordField; @@ -83,22 +92,30 @@ @Override public void createFieldEditors() { + Composite updateIntervalParent = getFieldEditorParent(); LongQuantityFieldEditor updateInterval = new LongQuantityFieldEditor(PreferencesKeys.PROPERTY_UPDATE_INTERVAL, - Messages.CommunicationPage_CAPTION_DEFAULT_UPDATE_INTERVAL, getFieldEditorParent(), MILLISECOND); + Messages.CommunicationPage_CAPTION_DEFAULT_UPDATE_INTERVAL, updateIntervalParent, MILLISECOND); updateInterval.setValidRange(MILLISECOND.quantity(1), MILLISECOND.quantity(Integer.MAX_VALUE)); + updateInterval.getTextControl(updateIntervalParent).setData(TEXT_FIELD_NAME_KEY, UPDATE_INTERVAL_FIELD_NAME); addField(updateInterval); + Composite retainedEventParent = getFieldEditorParent(); IntegerFieldEditor retainedEventValues = new IntegerFieldEditor(PreferencesKeys.PROPERTY_RETAINED_EVENT_VALUES, - Messages.CommunicationPage_CAPTION_RETAINED_EVENT_VALUES, getFieldEditorParent()); + Messages.CommunicationPage_CAPTION_RETAINED_EVENT_VALUES, retainedEventParent); retainedEventValues.setValidRange(1, Integer.MAX_VALUE); + retainedEventValues.getTextControl(retainedEventParent).setData(TEXT_FIELD_NAME_KEY, RETAINED_EVENT_FIELD_NAME); addField(retainedEventValues); + Composite mailServerParent = getFieldEditorParent(); StringFieldEditor mailServer = new StringFieldEditor(PreferencesKeys.PROPERTY_MAIL_SERVER, - Messages.CommunicationPage_CAPTION_MAIL_SERVER, getFieldEditorParent()); + Messages.CommunicationPage_CAPTION_MAIL_SERVER, mailServerParent); + mailServer.getTextControl(mailServerParent).setData(TEXT_FIELD_NAME_KEY, SERVER_HOST_FIELD_NAME); addField(mailServer); + Composite mailServerPortParent = getFieldEditorParent(); mailServerPort = new IntFieldEditor(PreferencesKeys.PROPERTY_MAIL_SERVER_PORT, - Messages.CommunicationPage_CAPTION_MAIL_SERVER_PORT, getFieldEditorParent()); + Messages.CommunicationPage_CAPTION_MAIL_SERVER_PORT, mailServerPortParent); + mailServerPort.getTextControl(mailServerPortParent).setData(TEXT_FIELD_NAME_KEY, SERVER_PORT_FIELD_NAME); addField(mailServerPort); BooleanFieldEditor mailServerSecure = new BooleanFieldEditor(PreferencesKeys.PROPERTY_MAIL_SERVER_SECURE, @@ -114,11 +131,13 @@ userLabel.setText(Messages.CommunicationPage_CAPTION_MAIL_SERVER_USER); userField = new Text(getFieldEditorParent(), SWT.SINGLE | SWT.BORDER); userField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + userField.setData(TEXT_FIELD_NAME_KEY, USERNAME_FIELD_NAME); Label passLabel = new Label(getFieldEditorParent(), SWT.NONE); passLabel.setText(Messages.CommunicationPage_CAPTION_MAIL_SERVER_PASSWORD); passwordField = new Text(getFieldEditorParent(), SWT.PASSWORD | SWT.SINGLE | SWT.BORDER); passwordField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + passwordField.setData(TEXT_FIELD_NAME_KEY, PASSWORD_FIELD_NAME); } private void loadCredentials() { @@ -148,6 +167,14 @@ return true; } + @Override + protected void performDefaults() { + super.performDefaults(); + // Restore username and password to defaults manually, since they do not use FieldEditors + userField.setText(PreferencesKeys.DEFAULT_MAIL_SERVER_USER); + passwordField.setText(PreferencesKeys.DEFAULT_MAIL_SERVER_PASSWORD); + } + private void storeCredentials() { String oldCredentialsKey = getPreferenceStore().getString(PreferencesKeys.PROPERTY_MAIL_SERVER_CREDENTIALS); if (userField.getText().equals(PreferencesKeys.DEFAULT_MAIL_SERVER_USER) diff --git a/application/org.openjdk.jmc.rjmx/META-INF/MANIFEST.MF b/application/org.openjdk.jmc.rjmx/META-INF/MANIFEST.MF --- a/application/org.openjdk.jmc.rjmx/META-INF/MANIFEST.MF +++ b/application/org.openjdk.jmc.rjmx/META-INF/MANIFEST.MF @@ -24,7 +24,10 @@ org.openjdk.jmc.rjmx.test", org.openjdk.jmc.rjmx.messages.internal;x-friends:="org.openjdk.jmc.test.jemmy,org.openjdk.jmc.rjmx.test", org.openjdk.jmc.rjmx.persistence.internal;x-friends:="org.openjdk.jmc.console.persistence", - org.openjdk.jmc.rjmx.preferences;x-friends:="org.openjdk.jmc.console.ui,org.openjdk.jmc.rjmx.ui", + org.openjdk.jmc.rjmx.preferences; + x-friends:="org.openjdk.jmc.console.ui, + org.openjdk.jmc.rjmx.ui, + org.openjdk.jmc.console.uitest", org.openjdk.jmc.rjmx.servermodel; x-friends:="org.openjdk.jmc.browser, org.openjdk.jmc.test.jemmy, diff --git a/application/uitests/org.openjdk.jmc.console.uitest/META-INF/MANIFEST.MF b/application/uitests/org.openjdk.jmc.console.uitest/META-INF/MANIFEST.MF --- a/application/uitests/org.openjdk.jmc.console.uitest/META-INF/MANIFEST.MF +++ b/application/uitests/org.openjdk.jmc.console.uitest/META-INF/MANIFEST.MF @@ -15,6 +15,8 @@ Import-Package: org.openjdk.jmc.common.util, org.openjdk.jmc.console.ui.diagnostic.form, org.openjdk.jmc.console.ui.diagnostic.preferences, + org.openjdk.jmc.console.ui.messages.internal, + org.openjdk.jmc.console.ui.preferences, org.openjdk.jmc.rjmx.ui.internal, org.openjdk.jmc.rjmx.ui.operations, org.openjdk.jmc.test.jemmy, diff --git a/application/uitests/org.openjdk.jmc.console.uitest/src/test/java/org/openjdk/jmc/console/uitest/ConsolePreferencesTest.java b/application/uitests/org.openjdk.jmc.console.uitest/src/test/java/org/openjdk/jmc/console/uitest/ConsolePreferencesTest.java new file mode 100644 --- /dev/null +++ b/application/uitests/org.openjdk.jmc.console.uitest/src/test/java/org/openjdk/jmc/console/uitest/ConsolePreferencesTest.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, Red Hat Inc. All rights reserved. + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * The contents of this file are subject to the terms of either the Universal Permissive License + * v 1.0 as shown at http://oss.oracle.com/licenses/upl + * + * or the following license: + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other materials provided with + * the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to + * endorse or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.openjdk.jmc.console.uitest; + +import org.eclipse.jface.resource.JFaceResources; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.openjdk.jmc.common.unit.ITypedQuantity; +import org.openjdk.jmc.common.unit.LinearUnit; +import org.openjdk.jmc.common.unit.UnitLookup; +import org.openjdk.jmc.console.ui.messages.internal.Messages; +import org.openjdk.jmc.console.ui.preferences.CommunicationPage; +import org.openjdk.jmc.rjmx.preferences.PreferencesKeys; +import org.openjdk.jmc.test.jemmy.MCJemmyTestBase; +import org.openjdk.jmc.test.jemmy.MCUITestRule; +import org.openjdk.jmc.test.jemmy.misc.base.wrappers.MCJemmyBase; +import org.openjdk.jmc.test.jemmy.misc.wrappers.MC; +import org.openjdk.jmc.test.jemmy.misc.wrappers.MCButton; +import org.openjdk.jmc.test.jemmy.misc.wrappers.MCButton.Labels; +import org.openjdk.jmc.test.jemmy.misc.wrappers.MCDialog; +import org.openjdk.jmc.test.jemmy.misc.wrappers.MCMenu; +import org.openjdk.jmc.test.jemmy.misc.wrappers.MCTable; +import org.openjdk.jmc.test.jemmy.misc.wrappers.MCText; + +/** + * Class to test basic functionality of the JMX Console preferences UI. + */ +public class ConsolePreferencesTest extends MCJemmyTestBase { + + private static final String SECURE_MAIL_SERVER_LABEL = Messages.CommunicationPage_CAPTION_SECURE_MAIL_SERVER; + + private MCDialog preferences; + + @Rule + public MCUITestRule testRule = new MCUITestRule(verboseRuleOutput) { + @Override + public void before() { + preferences = MCMenu.openPreferencesDialog(); + } + + @Override + public void after() { + preferences.closeWithButton(Labels.CANCEL); + } + }; + + @Test + public void checkRestoreDefaults() throws Exception { + preferences.selectTreeItem("JDK Mission Control", "JMX Console", "Communication"); + + // Enter some non-default values for each field + String msSuffix = UnitLookup.MILLISECOND.getAppendableSuffix(true); + preferences.enterText(CommunicationPage.UPDATE_INTERVAL_FIELD_NAME, "1234" + msSuffix); + preferences.enterText(CommunicationPage.RETAINED_EVENT_FIELD_NAME, "123456"); + preferences.enterText(CommunicationPage.SERVER_HOST_FIELD_NAME, "othermail.example.com"); + preferences.enterText(CommunicationPage.SERVER_PORT_FIELD_NAME, "1234"); + preferences.clickButton(SECURE_MAIL_SERVER_LABEL); + preferences.enterText(CommunicationPage.USERNAME_FIELD_NAME, "testuser"); + preferences.enterText(CommunicationPage.PASSWORD_FIELD_NAME, "testpassword"); + + // Click "Restore Defaults" button + preferences.clickButton(JFaceResources.getString("defaults")); + + // Check that all fields restored to defaults + ITypedQuantity intervalQty = UnitLookup.TIMESPAN.parseInteractive(preferences.getText(CommunicationPage.UPDATE_INTERVAL_FIELD_NAME)); + Assert.assertEquals(PreferencesKeys.DEFAULT_UPDATE_INTERVAL, intervalQty.longValueIn(UnitLookup.MILLISECOND)); + Assert.assertEquals(String.valueOf(PreferencesKeys.DEFAULT_RETAINED_EVENT_VALUES), + preferences.getText(CommunicationPage.RETAINED_EVENT_FIELD_NAME)); + Assert.assertEquals(PreferencesKeys.DEFAULT_MAIL_SERVER, + preferences.getText(CommunicationPage.SERVER_HOST_FIELD_NAME)); + Assert.assertEquals(String.valueOf(PreferencesKeys.DEFAULT_MAIL_SERVER_PORT), + preferences.getText(CommunicationPage.SERVER_PORT_FIELD_NAME)); + Assert.assertEquals(PreferencesKeys.DEFAULT_MAIL_SERVER_SECURE, + preferences.getButtonState(SECURE_MAIL_SERVER_LABEL)); + Assert.assertEquals(PreferencesKeys.DEFAULT_MAIL_SERVER_USER, + preferences.getText(CommunicationPage.USERNAME_FIELD_NAME)); + Assert.assertEquals(PreferencesKeys.DEFAULT_MAIL_SERVER_PASSWORD, + preferences.getText(CommunicationPage.PASSWORD_FIELD_NAME)); + } + +} diff --git a/application/uitests/org.openjdk.jmc.test.jemmy/src/test/java/org/openjdk/jmc/test/jemmy/misc/wrappers/MCDialog.java b/application/uitests/org.openjdk.jmc.test.jemmy/src/test/java/org/openjdk/jmc/test/jemmy/misc/wrappers/MCDialog.java --- a/application/uitests/org.openjdk.jmc.test.jemmy/src/test/java/org/openjdk/jmc/test/jemmy/misc/wrappers/MCDialog.java +++ b/application/uitests/org.openjdk.jmc.test.jemmy/src/test/java/org/openjdk/jmc/test/jemmy/misc/wrappers/MCDialog.java @@ -299,6 +299,17 @@ } /** + * Returns the current text found in the named text field + * + * @param name + * the name of the text field instance + * @return the text from the text field + */ + public String getText(String name) { + return MCText.getByName(getDialogShell(), name).getText(); + } + + /** * Finds a text input field with the supplied tooltip text and replaces that text. * * @param tooltip