Repository navigation
Interfaces for Selecting Agents #1627
Replies: 15 comments 5 replies
|
I asked...
Simone responded... Some first thoughts after looking at how the GUI works today. The Select Agent menu is built from ITestModel.AvailableAgents, which is just a list of names, and the chosen one goes into the RequestedAgentName setting. That’s fine for a handful of local agents, but not for remote ones.
|
|
I asked...
Roald (@rowo360) responded... Simone's thoughts are already spot on—I can only add:
|
|
@oznetmaster As to programming interfaces, I believe the GUI will not see anything below the level of info provided by |
|
@CharliePoole , @simoneb and @rowo360 , I agree with the direction Simone and Roald have outlined. My preference would be to keep the common local case simple and provide a small dialog for remote selection. I would envisage this workflow:
I would support Roald's suggestion to persist configured servers and query their capabilities when needed. What we persist for a project should describe the requested destination and selection policy, rather than identify a particular running agent process. An explicitly requested agent implementation could also be remembered, provided its absence produces a clear explanation. One important detail is that destination selection must be possible before test discovery, including when the package cannot execute on the GUI machine. Changing the destination after discovery would require an appropriate unload/reload and fresh discovery. I would also distinguish a configured target from an already-running server. Our deployment approach allows the server to be deployed with the test package. The user should therefore be able to select that target even when its server is not currently running. Opening the selection dialog should not itself deploy software, acquire a reservation or start a test agent. Once a remote destination is explicitly selected, inability to use it should produce a clear failure and an opportunity to retry or change the selection. It should never silently execute the tests locally. My older Crestron GUI reinforces the usefulness of remembering a destination and making it visible. Its processor-specific controls would not belong in TestCentric, but the general destination-selection workflow does. |
|
I'm seeing more agreement than disagreement here. I'm in agreement as well. Here are the details as I see them.
This is still pretty high level. @simoneb, can you take what we have all said and come up with a mockup for us? |
|
@oznetmaster I have a bunch of questions about your comment, which I'll ask inline...
Agreed!
Yes, Default implies a separate local process for each assembly, targeting the runtime for which the assembly was built or the next higher compatible runtime for which an agent is available.
What is meant by "configured targets in this context?" Is it a server with one or more agents available potentially available?
So this would be similar to our own agent selection minus "In Process" and "Remote" but also showing more information about the agent? Maybe our own menu should provide more information as well for local process agents, perhaps on hovering.
Do you mean the buttons in the GUI? If so, perhaps we should move agent selection from the File menu to the bar using a dropdown button.
I agree. Our settings are mainly strings, but that could be json or xml if we like.
This one confused me. Is this a problem with respect to the format of the test assembly? Or is the assembly simply not visible to the machine running the GUI? I think I'm missing something in your use case. Of course, this would not be a problem in the console runner, which doesn't do a separate discovery step before execution.
This brings us back to "configured target" which I was assuming was a server and was likely already running. However, I recognize this as a back-end discussion and most likely can be postponed for a bit. :-) Neither opening the dialog nor even selecting an agent to use should cause anything to happen. Although older agents needed to be loaded in memory in order to ask them if they could run a particular package, our latest versions no longer require being loaded until the actual discovery or execution begins.
Agreed.
It may be helpful to see an image of your Crestron GUI if that would be acceptable to the client. Otherwise, perhaps a rough drawing? In spite of the questions, I think we are making progress. |
|
@CharliePoole here's a first mockup putting together what you, Roald and Neil said, including this morning's points about the toolbar drop-down and the info on hover. Names, menus and toolbar buttons come from the current code; everything else is a proposal.
A few things I'm not sure about yet:
|
|
Thanks for doing this. It's late so I won't comment on the details now except...
|
|
@CharliePoole , @simoneb and @rowo360 The toolbar drop-down in Simone's mockup captures what I meant by keeping the destination visible beside the execution controls. I support that direction, preserving the existing local choices and adding In Process and Remote below the separator as Charlie suggested. To answer Charlie's questions, a configured target is a saved description of where we intend to run tests and how the execution infrastructure can reach that environment. For a resident server it can identify an existing endpoint. For deployment on demand it identifies the machine or processor and the deployment/startup configuration; the NUnit server endpoint may only become known when preparation occurs. In either case, the target may offer one or more compatible agents. It is not the identity of an already-running agent process. Yes, Automatic on a selected remote target is analogous to the existing local automatic choice, constrained to that target. Additional information on hover would be useful for local agents as well. An explicit remote selection should remain remote if acquisition fails, as we have agreed. My discovery point needs a clearer example. The test assembly can be present on the GUI machine, ready to deploy, but require a runtime environment or platform/vendor dependencies available only on the remote target. Reading the assembly's metadata locally is different from loading it and discovering its NUnit fixtures there. The GUI therefore needs to let the user select the remote destination before the initial engine discovery attempt, or recover from an unsuccessful local attempt by changing the destination. I was not proposing that the initial implementation must open assemblies that exist only on the server. The Console can receive the destination in its initial invocation; the GUI needs an equivalent path before automatic discovery. My earlier statement about changing destinations was also broader than necessary: when the change means discovery will use a different execution environment, we should unload and rediscover rather than assume that the old tree and test identities remain valid. We can decide the exact reload behavior as the GUI implementation develops. On Simone's specific questions:
My older GUI's relevant feature was remembering the processor/program destination and making it clear while selecting tests and viewing results; deployment was handled by a separate program. Simone's mockup already conveys the general idea, so I do not think we need to reproduce those processor-specific controls. One small accuracy note: the CP4 example in the mockup is a possible future backend for us; our implemented processor backend is for Crestron Home. I agree that the deployment and provider internals belong in the NUnit engine discussion. The GUI needs the target description, selection, useful progress and failure information, and the ordinary discovery/event/result interfaces. |
|
@CharliePoole , we crossed posts. I'm happy to remove File > Select Agent and use the toolbar drop-down as the single entry point; keeping the menu was only a preference, not a requirement. Having Manage Remote Targets open the target-management page directly also makes sense to me. |
|
@oznetmaster thanks, that's a useful distinction. Here's v6 of the mockup with it folded in:
I also added a Reconnect button in 4e, which only asks the target for the state of that run. Happy to drop it if it doesn't fit.
With that settled, I agree this is a good basis for the initial implementation. |
|
The discussion has already moved forward, with a great mock-up, lots of details, and good results. I agree with all of them. 👍 |
|
@rowo360 I imagine three tiers of users...
Normally, I'd focus entirely on the first two. However, since Neil is contributing his efforts on the NUnit team as well as here, we're paying a bit more attention to his needs. This seems like a fair tradeoff to me. It's beneficial to this project, since we'll get to use the features for tier 2 out of NUnit, which would otherwise not be included in the 4.0 engine. It's not yet decided what interface we will eventually implement, but the design has another purpose as well. It's giving a picture of what info any client needs to get about a servers capabilities and what actions the client can perform. I now have a better understanding I had than I did when there were only verbal descriptions. I'm applying that in the NUnit interface design and we'll be able to use that new interface in TestCentric. You can see some of that in the discussion around nunit/nunit-console#1918. On a more immediate note... if we don't show the dropdown, should we keep the file menu? I was thinking that the dropdown could be an easier thing for users, just as we use a dropdown for display strategies. |
|
Thanks everyone. I'd go with Neil's suggestion: keep a compact Run on drop-down always visible, showing Default. The typical user never needs to open it, but local agents (and In Process, once we have it) stay one click away, so we don't need File > Select Agent anymore. That's how #1629 works today: it lists only the local agents, shows "Run on: Default (local process)" and is disabled during a run. Remote targets would later just add entries to the same list. @rowo360, if it still feels like too much once you've tried it, we can revisit hiding it behind a setting. |



Uh oh!
There was an error while loading. Please reload this page.
@oznetmaster @simoneb @rowo360
For beta9 we plan to add support for Remote and InProcess agents in addition to LocalProcess agents. This will, of course, require support from NUnit for those agent types, which is not yet available. In this discussion we need to talk about "interfaces" in two different contexts:
We should qualify the word "interface" whenever the context is not clear.
This discussion is publicly visible and anyone interested is free to join. I've mentioned three people above. One of them is part of the NUnit engine team and two are part of the TestCentric GUI team. I'm involved in both.
I'll next seed this discussion with comments I already received by email. Hang on... :-)
All reactions