armadaproject/armada

Improve repo test coverage in various Go packages

richscott opened this issue · 5 comments

This is simply a list of suggested Golang files and functions in the Armada source repo that currently have low or no test coverage, and would be helpful to write new or enhanced tests for these, to verify functionality. Not every entry in here needs to be addressed in a single pull request - we will close out this ticket and create new ones with a trimmed down list of the remaining entries as necessary. Note that some of the functions are private - it may be required to change their visibility to public, depending on if the test code has Go-package access to the tested function.

To run the unit-tests and verify coverage, if you have a copy of the Armada repository, do:

$ mage tests 
$ go tool cover -func=test-reports/coverage.out > ./go-test-coverage.txt

(The output in go-test-coverage.txt will be much longer and wider than the list below, which was edited for brevity, but you will be able to search for the exact function and its coverage amount.)

Note that you can also write the coverage statistics to a HTML file, and see a colorized view of each file, showing which exact lines were/were-not covered in a test, by doing

$ go tool cover -html=test-reports/coverage.out -o coverage.html

Run go tool cover -h for more information.


  • internal/armada/server/submit_to_log.go:857: createJobs 0.0%
  • internal/armada/server/submit_to_log.go:861: createJobsObjects 0.0%
  • internal/common/database/migrations.go:91: ReadMigrations 0.0%
  • internal/common/database/migrations.go:125: ReadMigrationsFromStatik 0.0%
  • internal/executor/job/submit.go:54: SubmitJobs 0.0%
  • internal/executor/job/submit.go:58: submitJobs 0.0%
  • internal/executor/job/submit.go:84: submitWorker 0.0%
  • internal/executor/job/submit.go:113: submitPod 0.0%
  • internal/executor/job/submit.go:153: applyExecutorSpecificIngressDetails 0.0%
  • internal/executor/job/util.go:14: CreateSubmitJobFromExecutorApiJobRunLease 0.0%
  • internal/lookoutv2/repository/getjobs.go:205: sortRuns 60.0%
  • internal/lookoutv2/repository/getjobs.go:221: getJobRunTime 40.0%
  • internal/lookoutv2/repository/getjobs.go:231: makeJobRows 84.6%
  • internal/lookoutv2/repository/getjobs.go:292: makeRunRows 84.6%
  • internal/lookoutv2/repository/getjobs.go:337: makeAnnotationRows 84.6%
  • internal/scheduler/database/executor_repository.go:77: StoreExecutor 72.7%
  • internal/scheduler/scheduler_metrics.go:205: observeJobAggregates 0.0%
  • internal/scheduler/scheduler_metrics.go:221: reportNumberOfJobsConsidered 0.0%
  • internal/scheduler/scheduler_metrics.go:237: reportQueueShares 0.0%
  • pkg/client/validation/submit_file.go:38: ValidateSubmitFile 0.0%

Hey @richscott What i understand from test coverage is that-

Suppose I have a file with 2 functions but one function is commented-

func f() int {
	return 2
}

/*func g() int {
return 4
}  */

func main() {
}

and i have a test file for it-

package main

import "testing"

func TestF(t *testing.T) {
	v := f()
	if v != 4 {
		t.Error("Fails")
	}
}

so when i run the command go test -cover then the output will be-

--- FAIL: TestF (0.00s)
    code_test.go:8: Fails
FAIL
coverage: 100.0% of statements
exit status 1
FAIL    test    0.001s

The output is because the test covered all the statements but the condition in test file failed..

If i remove the comment from function in the file-

package main

func f() int {
	return 2
}

func g() int {
return 4
}  

func main() {
}

and then run the command go test -cover then the output will be-

--- FAIL: TestF (0.00s)
    code_test.go:8: Fails
FAIL
coverage: 50.0% of statements
exit status 1
FAIL    test    0.001s

We can get a .html file also if we need to see a good view.

I can work on this issue @richscott

@Bharadwajshivam28 You are exactly right. And if you run the command to generate html (go tool cover -html=test-reports/coverage.out -o coverage.html), you can open the coverage.html in your browser, and you will see the exact lines that are not covered in a test (they will be in red; code lines that are covered in a test will be in green; comments and untestable code will be in gray).

@Bharadwajshivam28 You are exactly right. And if you run the command to generate html (go tool cover -html=test-reports/coverage.out -o coverage.html), you can open the coverage.html in your browser, and you will see the exact lines that are not covered in a test (they will be in red; code lines that are covered in a test will be in green; comments and untestable code will be in gray).

Yes i saw the process to generate html file also..

Thanks.... @richscott

Hey @richscott Once the current PR for the function ReadMigrations gets over then I was thinking to go with the next one which is ReadMigrationsFromStatik