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

Be stricter on eunit compilation-based warnings #650

Merged
merged 44 commits into from
Jul 14, 2020
Merged

Be stricter on eunit compilation-based warnings #650

merged 44 commits into from
Jul 14, 2020

Conversation

paulo-ferraz-oliveira
Copy link
Contributor

We stop compilation with error the same we would for normal code (warnings_as_errors).

We apply this to the Travis checks.

We fix the issues surfaced by this increased strictness.

@paulo-ferraz-oliveira

This comment has been minimized.

@paulo-ferraz-oliveira

This comment has been minimized.

@nalundgaard
Copy link
Contributor

Looks like it's clean on rebar3 now, only rebar2 giving new trouble:

Maybe $CHECK_EUNIT_FILES shouldn't contain $CHECK_FILES?

509make[1]: Leaving directory '/home/travis/build/erlcloud/erlcloud'
510dialyzer --no_check_plt --fullpath \
511	ebin/*.beam .eunit/*.beam \
512	-I include \
513	--plt .dialyzer_plt
514  Compiling some key modules to native code... done in 0m0.17s
515  Proceeding with analysis...
516dialyzer: Analysis failed with error:
517Duplicate modules: [["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_sns.beam",
518                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_sns.beam"],
519                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_as.beam",
520                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_as.beam"],
521                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_redshift.beam",
522                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_redshift.beam"],
523                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_lambda.beam",
524                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_lambda.beam"],
525                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_athena.beam",
526                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_athena.beam"],
527                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_kinesis.beam",
528                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_kinesis.beam"],
529                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_config.beam",
530                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_config.beam"],
531                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_application_autoscaler.beam",
532                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_application_autoscaler.beam"],
533                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ddb_impl.beam",
534                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ddb_impl.beam"],
535                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_http.beam",
536                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_http.beam"],
537                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ec2_meta.beam",
538                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ec2_meta.beam"],
539                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_cloudfront.beam",
540                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_cloudfront.beam"],
541                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_mms.beam",
542                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_mms.beam"],
543                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_glue.beam",
544                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_glue.beam"],
545                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_directconnect.beam",
546                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_directconnect.beam"],
547                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_mon.beam",
548                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_mon.beam"],
549                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ecs_container_credentials.beam",
550                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ecs_container_credentials.beam"],
551                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ec2.beam",
552                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ec2.beam"],
553                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_cur.beam",
554                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_cur.beam"],
555                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_autoscaling.beam",
556                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_autoscaling.beam"],
557                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_sqs.beam",
558                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_sqs.beam"],
559                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_kinesis_impl.beam",
560                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_kinesis_impl.beam"],
561                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_iam.beam",
562                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_iam.beam"],
563                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ddb_util.beam",
564                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ddb_util.beam"],
565                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_emr.beam",
566                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_emr.beam"],
567                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_xml.beam",
568                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_xml.beam"],
569                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_sdb.beam",
570                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_sdb.beam"],
571                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_rds.beam",
572                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_rds.beam"],
573                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud.beam",
574                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud.beam"],
575                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_waf.beam",
576                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_waf.beam"],
577                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_util.beam",
578                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_util.beam"],
579                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_s3.beam",
580                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_s3.beam"],
581                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_cloudformation.beam",
582                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_cloudformation.beam"],
583                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ses.beam",
584                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ses.beam"],
585                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_mturk.beam",
586                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_mturk.beam"],
587                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_kms.beam",
588                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_kms.beam"],
589                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_httpc.beam",
590                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_httpc.beam"],
591                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_elb.beam",
592                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_elb.beam"],
593                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ecs.beam",
594                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ecs.beam"],
595                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ddb1.beam",
596                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ddb1.beam"],
597                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_cloudtrail.beam",
598                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_cloudtrail.beam"],
599                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_aws.beam",
600                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_aws.beam"],
601                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ddb_streams.beam",
602                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ddb_streams.beam"],
603                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_mes.beam",
604                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_mes.beam"],
605                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_cloudsearch.beam",
606                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_cloudsearch.beam"],
607                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_sts.beam",
608                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_sts.beam"],
609                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_json.beam",
610                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_json.beam"],
611                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ddb.beam",
612                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ddb.beam"],
613                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_cloudwatch_logs.beam",
614                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_cloudwatch_logs.beam"],
615                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_route53.beam",
616                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_route53.beam"],
617                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_inspector.beam",
618                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_inspector.beam"],
619                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_states.beam",
620                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_states.beam"],
621                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_ddb2.beam",
622                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_ddb2.beam"],
623                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_guardduty.beam",
624                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_guardduty.beam"],
625                    ["/home/travis/build/erlcloud/erlcloud/.eunit/erlcloud_retry.beam",
626                     "/home/travis/build/erlcloud/erlcloud/ebin/erlcloud_retry.beam"]]
627Last messages in the log cache:
628  Reading files and computing callgraph... 
629Makefile:87: recipe for target 'check-eunit' failed
630make: *** [check-eunit] Error 1
631The command "make check-eunit" exited with 2.

@paulo-ferraz-oliveira

This comment has been minimized.

@paulo-ferraz-oliveira
Copy link
Contributor Author

Maybe $CHECK_EUNIT_FILES shouldn't contain $CHECK_FILES?

This makes sense, since we would effectively duplicate the files for analysis. I'm testing locally and pushing a commit at the same time (again, I rebased it onto master).

@nalundgaard
Copy link
Contributor

Here's the most recent output on rebar2:

log.txt

Quite the wall of issues, all on the test beams AFAICT. I am thinking rebar3 must just not dialyze those modules, as I can't imagine it working on rebar3 and not on rebar2 any other way.

@paulo-ferraz-oliveira
Copy link
Contributor Author

Quite the wall of issues, all on the test beams AFAICT. I am thinking rebar3 must just not dialyze those modules, as I can't imagine it working on rebar3 and not on rebar2 any other way.

What's happening is that rebar.config was not correct (which is why rebar3 wasn't picking up those issues). It'll take a while longer, but I think I can tackle it... it's a nice exercise, in any case :D

@paulo-ferraz-oliveira
Copy link
Contributor Author

What's happening is that rebar.config was not correct (which is why rebar3 wasn't picking up those issues). It'll take a while longer, but I think I can tackle it... it's a nice exercise, in any case :D

I further looked into this and it seems the newer rebar3 version (not yet released as 3.14.x) already supports rebar3 as test dialyzer (erlang/rebar3#2190). Since the way things are setup (in this branch) already shows the errors on rebar 2 I'll go ahead and:

  1. continue with the fixes (locally, using rebar3 from master),
  2. make sure rebar.config is updated as it should for when rebar3 comes out.

What this means is that, for a while, dialyzer for rebar 2 (src + test) and rebar3 (src only) will run for different files. Is that an issue for you?

Note: I already found (via this analysis) -spec(_). errors on the main interfaces.

@nalundgaard
Copy link
Contributor

What this means is that, for a while, dialyzer for rebar 2 (src + test) and rebar3 (src only) will run for different files. Is that an issue for you?

Not at all—not like it's something we can control, and it's good that it's being patched in rebar3 soon. Thanks for doing this!

The introduction of warnings_as_errors surfaced two issue classes that'll be solved in this
branch's context

We include this in .travis.yml so that from now on the applied strictness is maintained
Also, there's no need for ifdef TEST, in this case, since it's done by eunit by default
`?_assertNotException` (also `?assertNotException`) is to be used in cases where the Class and Term
of the exception are previously known to expect not matching against. If used generically
(with `_`, as-was) the Erlang pre-processor will expand that macro in such a way that a
`case ... of _ -> ...; _ -> ... end` will occur thus causing an unexpected compilation issue

This change fixes the compilation issue while maintaining expected behaviour
@paulo-ferraz-oliveira

This comment has been minimized.

@paulo-ferraz-oliveira

This comment has been minimized.

@paulo-ferraz-oliveira
Copy link
Contributor Author

It should be present: https://github.com/erlcloud/erlcloud/blob/e4d903c/rebar.config.script#L8

It seems to be behaving better now. Let's wait on Travis CI.

@paulo-ferraz-oliveira
Copy link
Contributor Author

I think the current checks might be somewhat redundant. Shouldn't we just run compile (with "warnings as errors"), dialyze and eunit? (in rebar3 the last two already do compile)
(sure, they'll run in Travis CI, but maybe there's no need for such repetitiveness)

Any thoughts on this?

@paulo-ferraz-oliveira

This comment has been minimized.

@nalundgaard
Copy link
Contributor

I think the current checks might be somewhat redundant. Shouldn't we just run compile (with "warnings as errors"), dialyze and eunit? (in rebar3 the last two already do compile)
(sure, they'll run in Travis CI, but maybe there's no need for such repetitiveness)

Any thoughts on this?

I endorse reducing pointless repetition.

According to the doc.s (https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_Service.html)
createdAt is "The Unix timestamp for when the service was created." which is a pos_integer(), not a
float()

I also update updated_at for the same reason (it's not interface breaking, it's a bugfix)
1. we remove check-unit (added by us) and concentrate the analysis in check (already present)
2. we rename eunit_warnigs (added by us) as warnings and concentrate the analysis there
3. we change rebar.config.script so we can accept an environment variable to control erl_opts
(as a kind of approach to a rebar3 profile)
@paulo-ferraz-oliveira

This comment has been minimized.

@nalundgaard
Copy link
Contributor

Thanks so much @paulo-ferraz-oliveira! This is a really cool improvement, and I'm really impressed by how much inconsistency/copy-pasta had gotten through without this strictness. Definitely evidence of its value. I'll give this a final (I hope) look later today, and I'll also ask @motobob and @kkuzmin if they want to take a glance at this. It is a bit large of a change for me to just merge alone, but I agree we should get this in ASAP due to its scope.

Copy link
Contributor

@nalundgaard nalundgaard left a comment

Choose a reason for hiding this comment

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

❤️ Looks great. @motobob or @kkuzmin do either of you guys want to review this additionally, or do you trust me unconditionally to merge it? ;)

@paulo-ferraz-oliveira
Copy link
Contributor Author

Sorry about the late commit. I just remembered we wanted to start testing on Erlang/OTP 23, also.

@nalundgaard
Copy link
Contributor

Chatted with @motobob separately, he is OK with my approval, so I am merging this. I don't think I'll release a hex package for this unless you see a need for that. Thanks again!

@nalundgaard nalundgaard merged commit 0f05400 into erlcloud:master Jul 14, 2020
@paulo-ferraz-oliveira
Copy link
Contributor Author

I don't think I'll release a hex package for this unless you see a need for that. Thanks again!

I do have a need for it :) [not specifically this PR but the 3 previous ones] I'm updating an internal lib. to run on OTP 23 and would be grateful if a tag were available.

@nalundgaard
Copy link
Contributor

OK, published 3.3.3 (hex).

@paulo-ferraz-oliveira paulo-ferraz-oliveira deleted the feature/eunit_warnings branch July 16, 2020 10:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants