Skip to content

test: Eliminate the second ReadRows Service and use a generalized version of the first ReadRows#1457

Merged
danieljbruce merged 49 commits into3527322442-to-main-2from
3527322442-refactor-the-test-into-classes-2
Jul 29, 2024
Merged

test: Eliminate the second ReadRows Service and use a generalized version of the first ReadRows#1457
danieljbruce merged 49 commits into3527322442-to-main-2from
3527322442-refactor-the-test-into-classes-2

Conversation

@danieljbruce
Copy link
Contributor

@danieljbruce danieljbruce commented Jul 22, 2024

Summary:

This PR is a follow-up to #1447. It eliminates the second ReadRows service entirely.

Background:

To solve a high priority issue previously I created readRowsImpl2.ts by copy/pasting code from readRowsImpl.ts and making tweaks. There wasn't enough time to investigate if readRowsImpl.ts could be generalized to do what readRowsImpl2.ts was doing for us so we are addressing that technical debt now.

Changes:

  • The second read rows service known as readRowsImpl2.ts is deleted entirely.
  • readRowsImpl.ts has been generalized so that when keyFrom and keyTo are not provided then the keys from the request parameters will be used. This was how readRowsImpl2.ts worked.
  • Any code previously using readRowsImpl2 will now use the generalized version of readRowsImpl and when not providing the keyFrom and keyTo parameters then the key range in the generated chunks will be determined by the values passed into the request.
  • Much like the other tests - increase the timeout so that the Windows environment has enough time to complete the test runs

Next steps:

  1. Break down the readRowsImpl into smaller parts.
  2. Address issue with too many if statements in ReadRowsImpl. Introduce classes, generate unit tests, make the service more modular.

Only ignore keyFrom and keyTo when they are undefined and not just when they are Falsy.
The old service has been generalized enough to mock correct server behaviour.
they are undefined anyway.
@product-auto-label product-auto-label bot added the size: l Pull request size is large. label Jul 22, 2024
@danieljbruce danieljbruce changed the title test: will update test: Eliminate the second ReadRows Service and use a generalized version of the first ReadRows Jul 24, 2024
@danieljbruce danieljbruce marked this pull request as ready for review July 24, 2024 15:57
@danieljbruce danieljbruce requested a review from a team as a code owner July 24, 2024 15:57
@danieljbruce danieljbruce requested a review from a team July 24, 2024 15:57

let chunksSent = 0;
const chunks = generateChunks(serviceParameters);
let keyFromRequestClosed: any;
Copy link
Contributor

Choose a reason for hiding this comment

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

please do not use anys

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I made changes so that the entire file doesn't contain any type. This entire repeated block of if statements has already been replaced with one function call in the next branch/PR anyways.

@danieljbruce danieljbruce requested a review from sofisl July 26, 2024 16:54
Copy link
Contributor

@leahecole leahecole left a comment

Choose a reason for hiding this comment

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

one non blocking nit

test/readrows.ts Outdated
Comment on lines +342 to +344
if (process.platform === 'win32') {
this.timeout(60000); // it runs much slower on Windows!
}
Copy link
Contributor

Choose a reason for hiding this comment

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

nit - could this be in a beforeeach?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I grouped this repeated code into a setTestTimeout function. Unfortunately, we can't use beforeEach because you will notice the code uses this which is a reference to the test context. If we put this code into a beforeEach hook then this.timeout would set the timeout on the beforeEach and not on the it.

danieljbruce and others added 7 commits July 29, 2024 11:41
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
@danieljbruce danieljbruce removed the do not merge Indicates a pull request not ready for merge, due to either quality or timing. label Jul 29, 2024
@danieljbruce danieljbruce merged commit aa49131 into 3527322442-to-main-2 Jul 29, 2024
@danieljbruce danieljbruce deleted the 3527322442-refactor-the-test-into-classes-2 branch July 29, 2024 16:58
danieljbruce added a commit that referenced this pull request Sep 23, 2024
* test: begin to refactor the mock service (#1447)

* Use prettyPrintRequest from readRowsImpl1

* Define interfaces for creating a Bigtable service

* Remove keyFrom and keyTo from each test

* Define the service inline for standard keys errors

* Add a comment about the refactor steps I am doing

* Add a header to the service parameters file

* Use the ChunkGeneratorParameters interface

* Simplify the diff by creating local variables

* Remove comment

* Eliminate chunks per response constant

* Change imports

* Replace with as ServerImplementationInterface

* Update test/readrows.ts

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* Add a second test for an error at a random pos

* Add some comments for documentation

* Chunk generation - add the parameter

* Added comments to all the interfaces

* Fix a regression bug from the merge

---------

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* test: Eliminate the second ReadRows Service and use a generalized version of the first ReadRows (#1457)

* Use prettyPrintRequest from readRowsImpl1

* Define interfaces for creating a Bigtable service

* Remove keyFrom and keyTo from each test

* Define the service inline for standard keys errors

* Add a comment about the refactor steps I am doing

* Add a header to the service parameters file

* Use the ChunkGeneratorParameters interface

* Simplify the diff by creating local variables

* Remove comment

* Eliminate chunks per response constant

* Change imports

* Set up the second ReadRows service to use params

* Remove duplicate copy of generate chunks from serv

* Remove second copy of isKeyInRowSet

* Eliminate duplicate copies of the debug log

* Fix a bug for the to and from service parameters

Only ignore keyFrom and keyTo when they are undefined and not just when they are Falsy.

* Add cancel back into the mock service for testing

* Add variables to match service 1

* Add one more check to match the other service

* Remove usages of ReadRows2Impl

* Remove the new service

The old service has been generalized enough to mock correct server behaviour.

* Moved the position of the comment for 150 rows

* Eliminate setting keyTo and keyFrom

they are undefined anyway.

* Add a second test for an error at a random pos

* Add some comments for documentation

* Chunk generation - add the parameter

* Added comments to all the interfaces

* Delete file

* Change splitted to split

* Remove export

* Don’t rename the interfaces

There is no point

* Increase Windows timeout

* Provide functions to eliminate if statements

* Eliminate the if statements

Make a direct call to generateChunksFromRequest

* Revert "Eliminate the if statements"

This reverts commit 0996e89.

* Revert "Provide functions to eliminate if statements"

This reverts commit 4a4761f.

* Change any’s to string | undefined

* Eliminate duplicate code for setting timeouts

* remove only

* Update test/readrows.ts

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* Update test/readrows.ts

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* Update test/readrows.ts

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* Update test/readrows.ts

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* Update test/readrows.ts

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* Update test/readrows.ts

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* Update test/readrows.ts

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

---------

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* test: Eliminate repeated if statements in the ReadRows mock service reducing the size of it significantly (#1460)

* Use prettyPrintRequest from readRowsImpl1

* Define interfaces for creating a Bigtable service

* Remove keyFrom and keyTo from each test

* Define the service inline for standard keys errors

* Add a comment about the refactor steps I am doing

* Add a header to the service parameters file

* Use the ChunkGeneratorParameters interface

* Simplify the diff by creating local variables

* Remove comment

* Eliminate chunks per response constant

* Change imports

* Set up the second ReadRows service to use params

* Remove duplicate copy of generate chunks from serv

* Remove second copy of isKeyInRowSet

* Eliminate duplicate copies of the debug log

* Fix a bug for the to and from service parameters

Only ignore keyFrom and keyTo when they are undefined and not just when they are Falsy.

* Add cancel back into the mock service for testing

* Add variables to match service 1

* Add one more check to match the other service

* Remove usages of ReadRows2Impl

* Remove the new service

The old service has been generalized enough to mock correct server behaviour.

* Moved the position of the comment for 150 rows

* Eliminate setting keyTo and keyFrom

they are undefined anyway.

* Add a second test for an error at a random pos

* Add some comments for documentation

* Chunk generation - add the parameter

* Added comments to all the interfaces

* Group the property getter into a function

* Group key selection into functions

* Fix typo: default key

* Documentation for isInRowSet

* Eliminate variable - move function inline

* Omit optional selector on stream

* Create ReadRowsWritableStream interface

* Use new interface, remove ServerWritableStream

* Don’t pass the whole stream into helpers

* Add a function for generating the chunks

* The debug log should be a pass through parameter

* Solve compiler errors resulting immediately from

merge

* Add debugLog parameter to various functions

* Add return type

* Remove exports - functions are only used in this

module

* Revise merge correction

* Remove TODO for the stream type

* Update the getKeyValue function

* Eliminate place where debug log is needed

* Run linter

* test: Break the ReadRows service down into classes instead of a single long function (#1461)

* Use prettyPrintRequest from readRowsImpl1

* Define interfaces for creating a Bigtable service

* Remove keyFrom and keyTo from each test

* Define the service inline for standard keys errors

* Add a comment about the refactor steps I am doing

* Add a header to the service parameters file

* Use the ChunkGeneratorParameters interface

* Simplify the diff by creating local variables

* Remove comment

* Eliminate chunks per response constant

* Change imports

* Set up the second ReadRows service to use params

* Remove duplicate copy of generate chunks from serv

* Remove second copy of isKeyInRowSet

* Eliminate duplicate copies of the debug log

* Fix a bug for the to and from service parameters

Only ignore keyFrom and keyTo when they are undefined and not just when they are Falsy.

* Add cancel back into the mock service for testing

* Add variables to match service 1

* Add one more check to match the other service

* Remove usages of ReadRows2Impl

* Remove the new service

The old service has been generalized enough to mock correct server behaviour.

* Moved the position of the comment for 150 rows

* Eliminate setting keyTo and keyFrom

they are undefined anyway.

* Add a second test for an error at a random pos

* Add some comments for documentation

* Chunk generation - add the parameter

* Added comments to all the interfaces

* Group the property getter into a function

* Group key selection into functions

* Fix typo: default key

* Documentation for isInRowSet

* Eliminate variable - move function inline

* Omit optional selector on stream

* Create ReadRowsWritableStream interface

* Use new interface, remove ServerWritableStream

* Don’t pass the whole stream into helpers

* Add a function for generating the chunks

* The debug log should be a pass through parameter

* Add some TODOs about how to address this next

* Pull send response into a class

* Create a dedicated class for defining the service

* Change name to readRowsRequestHandler

* Pull the function that generates the chunks into

Separate module

* Generate documentation

* Add more documentation to the Service class

* Add debugLog as a method parameter

* Solve compiler errors resulting immediately from

merge

* Add debugLog parameter to various functions

* Add return type

* Remove exports - functions are only used in this

module

* Revise merge correction

* Remove TODO for the stream type

* Update the getKeyValue function

* Eliminate place where debug log is needed

* Run linter

* Eliminate the function that creates a service

Add a factory method instead

* Add documentation for the constructor

* Remove the TODO

* Set the timeout for the test

* Increase the timeout

* Eliminate ternary statement

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* Add a couple of comments

* re-write the ternary expression

---------

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api: bigtable Issues related to the googleapis/nodejs-bigtable API. size: l Pull request size is large.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants