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

clients(lr): allow for custom config #7613

Merged
merged 6 commits into from
Apr 4, 2019

Conversation

connorjclark
Copy link
Collaborator

@connorjclark connorjclark commented Mar 21, 2019

Summary

Main motivator: Smokerider needs to pass a custom config to Lightrider, otherwise the results do not correspond to the expectations.

But also, hey, a way to configure plugins in Lightrider! Just provide a config that extends the LR preset + adds your plugin coolness.

I can open a WIP internal CL for the LR branch that uses these changes, if necessary to review.

Related Issues/PRs

Just the proto changes: #7614
Internal Googler bug

clients/lightrider-entry.js Show resolved Hide resolved
// Clean up the configSettings
// Note: This is not strictly required for conversion if protobuf parsing is set to
// 'ignore unknown fields' in the language of conversion.
if (reportJson.configSettings) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

why is this being removed?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

It was pruning the JSON sent back to LR, which would then place it in a Config proto that only had {emulatedFormFactor, locale, onlyCategories}. Since the rest weren't saved it made sense to cut the extras here. With the proto changes, most of the settings (i left out things like output) can be saved, so I'm undoing the pruning. The fields that aren't in the proto are safely ignored when serialized.

Copy link
Collaborator

Choose a reason for hiding this comment

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

Gotcha, yeah basically I'm wondering why we don't need to prune anymore even though we still don't support 100% of the settings :)

Are the remaining extra properties any less of a concern than it was before? Based on the comments here, it seems like it was still technically unnecessary then but we decided to do it anyway 🤷‍♂️

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

it's just a couple string values now. before it was like, 95% of it. pruning is slightly more unnecessary now :)

@connorjclark
Copy link
Collaborator Author

Forgot about the round trip test :)

@@ -33,7 +33,7 @@ def clean():
proto_lhr = lhr_pb2.LighthouseResult()

# fill proto lhr with data from JSON
Parse(json.dumps(data), proto_lhr)
Copy link
Collaborator

Choose a reason for hiding this comment

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

I guess to finally figure out my real concern, is this something that anyone else will now have to change and match or are we the only people ever doing this proto-json conversion :)

apologies for being very slow on the uptake here 😆

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

pretty sure the proto stuff has one user: us, with LR.

Copy link
Collaborator

Choose a reason for hiding this comment

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

awesome sauce

@connorjclark
Copy link
Collaborator Author

connorjclark commented Mar 29, 2019

I added back the config setting pruning, since we are punting on the proto changes.

I think we could keep the lighthouse-core/test/report/proto-test.js changes even without the config setting prune changes. Good to keep in this PR?

@connorjclark connorjclark changed the title clients(lr): allow for custom config. do not prune config in lhr. clients(lr): allow for custom config Mar 29, 2019
@connorjclark
Copy link
Collaborator Author

Any more review on this?

@patrickhulce
Copy link
Collaborator

Ah sorry connor I didn't flush my comments! I wish GH had an outbox of some sort that showed you all the PRs you had pending comments on :D

Copy link
Collaborator

@patrickhulce patrickhulce left a comment

Choose a reason for hiding this comment

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

the actual changes themselves LGTM

just a few testing nits :)

describe('round trip JSON comparison to everything', () => {
let sampleJson;

beforeEach(() => {
sampleJson = JSON.parse(preprocessor.processForProto(sample));

// Proto conversion turns null summaries into an empty object. This is OK,
Copy link
Collaborator

Choose a reason for hiding this comment

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

this comment gave me pause because it seems like the process of going through proto conversion turns {} into null, the previous comment suggests this is the case as well.

wouldn't it make more sense to adjust our faulty result instead of the source json?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

The result is fine, but the jest matcher doesn't like {} when it expects null. The distinction is meaningless in proto world but important just for jest.

Copy link
Collaborator

@patrickhulce patrickhulce Apr 2, 2019

Choose a reason for hiding this comment

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

I get that, but proto doesn't actually seem to turn null summaries into {} based on the previous comments and the fact that you are turning {} into null in the sample json, which means that proto seems to be turning {} into null, not the other way around...right? or am I getting super confused by the names here and roundtripJson is actually the expectation not the one that went through the proto and back

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

ahhhh yes, I got it all mixed up here. updated with what I intended to do

@@ -55,21 +55,28 @@ describe('round trip JSON comparison subsets', () => {
});

it('has the same config values', () => {
expect(roundTripJson.configSettings).toMatchObject(sampleJson.configSettings);
// Config settings from proto round trip should be a subset of the actual settings.
expect(sampleJson.configSettings).toMatchObject(roundTripJson.configSettings);
Copy link
Collaborator

Choose a reason for hiding this comment

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

wait how did it work the other way around then if one is a subset of the other 😆

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

These objects are actually 100% equal, so either way would be fine. It was only apparent that the order is wrong when I was allowing more properties to be in the proto result.

so the test change isn't needed, but it is more correct. whatever settings are in the round trip json (from proto) should match the values as found in the originating settings json

Copy link
Member

@brendankenny brendankenny left a comment

Choose a reason for hiding this comment

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

LGTM

It's funny that this runLighthouseInLR is gradually growing to be a mutant of the full module interface.

When/if we feel comfortable shipping a changed interface for LR, we could think about putting the parameters into the same order, move over to the same flags (move categoryIDs in there as onlyCategories, lrDevice as special lr-only presets, though that's really on CliFlags), etc. It's not a huge rush since it's all normalized internal to this file, but it could help with the consistency/documentation standpoint

@brendankenny brendankenny merged commit a76e7f2 into master Apr 4, 2019
@brendankenny brendankenny deleted the lr-config-proto-lr-entry-changes branch April 4, 2019 20:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants