Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable WebSocketModule unit tests #4538

Merged
13 commits merged into from
Apr 10, 2020
Merged

Conversation

JunielKatarn
Copy link
Contributor

@JunielKatarn JunielKatarn commented Apr 9, 2020

  • Add initial set of tests for class WebSocketModule.
  • Define mocking support types.
Microsoft Reviewers: Open in CodeFlow

@JunielKatarn JunielKatarn added the AutoMerge Causes a PR to be automatically merged once all requirements are passed (label drives bot activity) label Apr 9, 2020
@JunielKatarn JunielKatarn requested a review from a team April 9, 2020 05:04
@JunielKatarn JunielKatarn requested a review from a team as a code owner April 9, 2020 05:04
@ghost
Copy link

ghost commented Apr 9, 2020

Hello @JunielKatarn!

Because this pull request has the AutoMerge label, I will be glad to assist with helping to merge this pull request once all check-in policies pass.

Do note that I've been instructed to only help merge pull requests of this repository that have been opened for at least 60 minutes. No worries though, I will be back when the time is right! 😉

p.s. you can customize the way I help with merging this pull request, such as holding this pull request until a specific person approves. Simply @mention me (@msftbot) and give me an instruction to get started! Learn more here.

Copy link

@NikoAri NikoAri left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@NickGerleman
Copy link
Collaborator

This change adds quite a few mocks that essentially noop/do not conform to the defined interface. This is often a bit of a red flag, since we can start depending on behavior which is unimplemented in test code.

One strategy to deal with this are to inject/use more granular, mockable interfaces (not familiar enough with this code to know if we can do this). Another is to just leave this an an integration test. This takes longer to run, but testing against the real implementations provides a lot of value.

@JunielKatarn
Copy link
Contributor Author

This change adds quite a few mocks that essentially noop/do not conform to the defined interface. This is often a bit of a red flag, since we can start depending on behavior which is unimplemented in test code.

One strategy to deal with this are to inject/use more granular, mockable interfaces (not familiar enough with this code to know if we can do this). Another is to just leave this an an integration test. This takes longer to run, but testing against the real implementations provides a lot of value.

@NickGerleman
That's part of the plan. Every interface-overriden method will be lambda-mockable, but I intend to do those changes progressively.

I also agree the runtime is worth it, and being unit tests, likely negligible.

@NickGerleman
Copy link
Collaborator

This change adds quite a few mocks that essentially noop/do not conform to the defined interface. This is often a bit of a red flag, since we can start depending on behavior which is unimplemented in test code.
One strategy to deal with this are to inject/use more granular, mockable interfaces (not familiar enough with this code to know if we can do this). Another is to just leave this an an integration test. This takes longer to run, but testing against the real implementations provides a lot of value.

@NickGerleman
That's part of the plan. Every interface-overriden method will be lambda-mockable, but I intend to do those changes progressively.

I also agree the runtime is worth it, and being unit tests, likely negligible.

As a heads up, a lot of the native module API will change with Vlad's work this quarter. E.g. what type of things we expose to the module in the first place. E.g. native modules won't touch raw instances. I.e. it might not be worth going too far down the rabbit hole if it will all change.

@JunielKatarn
Copy link
Contributor Author

As a heads up, a lot of the native module API will change with Vlad's work this quarter. E.g. what type of things we expose to the module in the first place. E.g. native modules won't touch raw instances. I.e. it might not be worth going too far down the rabbit hole if it will all change.

I'm aware, and will adapt the mocking types as these changes develop.
For now, given the Desktop WebSocketModule is used in production, there is value in having a proper set of unit tests for it.

Note, this is just a first iteration and I will add tests and mocks subsequently.

@ghost ghost merged commit c8085b5 into microsoft:master Apr 10, 2020
asklar pushed a commit to asklar/react-native-windows that referenced this pull request Apr 10, 2020
* Prototype mockable MessageQueueThread and JSExecutor

* Declare MockJSExecutor::CallFunctionFunctor

* Add missing using std::unique_ptr

* Use WebSocketModule::MethodId

* clang format

* Make WebSocketModule methods override instead of virtual.

* Allow WebSocketModule to use custom resource factory

* Rename *Impl to *Mock

* Move Instance mocks into separate source files

* Move Instance mocks into separate source files

* Change files

* clang format

* Define WebSocketModule::SetResourceFactory
ghost pushed a commit that referenced this pull request Apr 22, 2020
* Publish fix

* Creating new Microsoft.ReactNative.sln (#4535)

* Created new Microsoft.ReactNative.sln
* Update PR to build vnext/Microsoft.ReactNative.sln
* Add params to disable ReactUWP nuget pack during PR

* applying package updates ***NO_CI***

* Move playground app to use Microsoft.ReactNative (#4534)

* Move playground app to use Microsoft.ReactNative

* formatting

* Bunch of code review feedback

* Change files

* formatting

* Delete unneeded gitignore

* Minor removal of diff

* Minor changes to try to avoid having to update cert all the time

* Fix bundle command

* No need to build rntester seperately, the release build of playground will do it from msbuild

* Remove test property

* Bump beachball from 1.28.0 to 1.28.1 (#4539)

* applying package updates ***NO_CI***

* applying package updates ***NO_CI***

* Enabling managed unit tests in CI loop (#4532)

* Disable .net native for managed unit tests

* Change files

* Enable managed unit tests in ci loop

* re-merge unit test tasks, can't run arm anyway

* Remove prefer 32bit from 64bit flavors

* Update mstest dependencies

* Managed tests are separate again

* Add comment

* Add test adapter path

* x86 debug again

* Update test adapter folder

* Try again

* remove frameworkuap10

* Switch to appxrecipie

* Try to switch to installed version of vstest

* Remove installer task

* applying package updates ***NO_CI***

* Remove 'Delete Android SDK' from E2ETest (#4554)

* Enable WebSocketModule unit tests (#4538)

* Prototype mockable MessageQueueThread and JSExecutor

* Declare MockJSExecutor::CallFunctionFunctor

* Add missing using std::unique_ptr

* Use WebSocketModule::MethodId

* clang format

* Make WebSocketModule methods override instead of virtual.

* Allow WebSocketModule to use custom resource factory

* Rename *Impl to *Mock

* Move Instance mocks into separate source files

* Move Instance mocks into separate source files

* Change files

* clang format

* Define WebSocketModule::SetResourceFactory

* applying package updates ***NO_CI***

* Improve inner loop and error reporting (local CLI) (#4536)

-Surface msbuild errors (shows as undefined right now)
-downloading nuget with Invoke-WebRequest will usually take a long time because of the PS progress bar (which sadly gets updated for every byte), so I'm disabling the progress bar (it only takes a second to download when the progress bar is turned off)
retry once if nuget failed since if you cancel at just the right time, you could end up with a truncated nuget.exe and are wedged unless you know which file to delete. Learned that the hard way.
-factor out calling onto powershell functions
-we were not exposing whether the function failed or not

* applying package updates ***NO_CI***

* Don't set readyState on connection error (#4562)

* Don't set readyState on connection error

* Change files

* applying package updates ***NO_CI***

* Bump @babel/core from 7.8.4 to 7.9.0 (#4565)

* Simplified C++ macros and improved their comments (#4568)

* Simplified C++ macros and improved their comments

* Change files

* applying package updates ***NO_CI***

* Handle syntax errors in RedBox

* Change files

* format

* clean up

Co-authored-by: Andrew Coates (REDMOND) <acoates@microsoft.com>
Co-authored-by: Jon Thysell <jthysell@microsoft.com>
Co-authored-by: React-Native-Windows Bot <53619745+rnbot@users.noreply.github.com>
Co-authored-by: Andrew Coates <30809111+acoates-ms@users.noreply.github.com>
Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Co-authored-by: Julio César Rocha <JunielKatarn@users.noreply.github.com>
Co-authored-by: Vladimir Morozov <vmoroz@users.noreply.github.com>
@JunielKatarn JunielKatarn deleted the wsmodule_unittests branch October 2, 2021 04:17
This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
AutoMerge Causes a PR to be automatically merged once all requirements are passed (label drives bot activity)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants