| #!groovy |
| |
| // Copyright 2019 Open Networking Foundation (ONF) |
| // |
| // Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>, |
| // the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>, |
| // or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg> |
| // |
| // TestON is free software: you can redistribute it and/or modify |
| // it under the terms of the GNU General Public License as published by |
| // the Free Software Foundation, either version 2 of the License, or |
| // (at your option) any later version. |
| // |
| // TestON is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // GNU General Public License for more details. |
| // |
| // You should have received a copy of the GNU General Public License |
| // along with TestON. If not, see <http://www.gnu.org/licenses/>. |
| |
| allTests = [:] |
| schedules = [:] |
| branches = [:] |
| |
| // read all json files and save as maps |
| def init(){ |
| def tests_buffer = readTrusted( "TestON/JenkinsFile/dependencies/tests.json" ) |
| def schedules_buffer = readTrusted( "TestON/JenkinsFile/dependencies/schedule.json" ) |
| def branches_buffer = readTrusted( "TestON/JenkinsFile/dependencies/branches.json" ) |
| allTests = readJSON text: tests_buffer |
| schedules = readJSON text: schedules_buffer |
| branches = readJSON text: branches_buffer |
| } |
| |
| // *************** |
| // General Methods |
| // *************** |
| |
| // returns the entire set of TestON tests from the json file |
| def getAllTests(){ |
| return allTests |
| } |
| |
| // returns the entire set of schedules from the json file |
| def getSchedules(){ |
| return schedules |
| } |
| |
| // returns a list of days corresponding to the given schedule code |
| def convertScheduleKeyToDays( sch ){ |
| return schedules[ sch ] |
| } |
| |
| // given a test dictionary, returns a list of tests as a string |
| def getTestListAsString( tests ){ |
| str_result = "" |
| for ( String test in tests.keySet() ){ |
| str_result += test + "," |
| } |
| return str_result[ 0..-2 ] |
| } |
| |
| // given a list of tests as a string, returns the list of tests as a map, similar formatted to tests.json |
| def getTestsFromStringList( list ){ |
| testsResult = [:] |
| for ( item in list ){ |
| if ( allTests.keySet().contains( item ) ){ |
| testsResult.put( item, allTests[ item ] ) |
| } |
| } |
| return testsResult |
| } |
| |
| // Get a given test property from the schedules list for a given test |
| // Example: getTestScheduleProperty( "FUNCflow", "nodeLabel" ) gets all node labels for each branch |
| def getTestScheduleProperty( test_name, property, tests=[:] ){ |
| schedulePropertyResult = [:] |
| |
| if ( tests == [:] ){ |
| tests = allTests |
| } |
| for ( subDict in tests[ test_name ][ "schedules" ] ){ |
| schedulePropertyResult.put( subDict[ "branch" ], subDict[ property ] ) |
| } |
| |
| return schedulePropertyResult |
| } |
| |
| // ******** |
| // Branches |
| // ******** |
| |
| // returns all branches from branches.json |
| def getAllBranches(){ |
| return branches |
| } |
| |
| // given a day, returns all branches that are run on that day |
| def getBranchesFromDay( day, tests=[:] ){ |
| branchesFromDayResult = [] |
| if ( tests == [:] ){ |
| tests = allTests |
| } |
| validSchedules = getValidSchedules( day ) |
| |
| for ( String key in tests.keySet() ){ |
| for ( subDict in tests[ key ][ "schedules" ] ){ |
| sch = subDict[ "day" ] |
| new_branch = convertBranchCodeToBranch( subDict[ "branch" ], false ) |
| if ( validSchedules.contains( sch ) && !branchesFromDayResult.contains( new_branch ) ){ |
| branchesFromDayResult += new_branch |
| } |
| } |
| } |
| return branchesFromDayResult |
| } |
| |
| // Converts a branch code to an actual ONOS branch. |
| // Example: converts onos-1.x to onos-1.15 |
| def convertBranchCodeToBranch( branch_code, withPrefix=true ){ |
| for ( String branch_type in branches.keySet() ){ |
| for ( String b in branches[ branch_type ].keySet() ){ |
| if ( branch_code == b ){ |
| return withPrefix ? ( "onos-" + branches[ branch_type ][ b ] ) : branches[ branch_type ][ b ] |
| } |
| } |
| } |
| return branch_code |
| } |
| |
| // given a branch, returns the corresponding branch code (hack) |
| // Example: given "onos-1.15", returns "onos-1.x" |
| def convertBranchToBranchCode( branch ){ |
| if ( branch == "master" ){ |
| return branch |
| } else if ( branch.substring( 0, 1 ) == "o" ) { |
| return branch.substring( 0, 6 ) + ".x" |
| } else { |
| return "onos-" + branch.substring( 0, 1 ) + ".x" |
| } |
| } |
| |
| // given a branch without a prefix, returns the branch with the "onos-" prefix |
| def addPrefixToBranch( branchNoPrefix ){ |
| if ( branchNoPrefix == "master" ){ |
| return "master" |
| } else { |
| return "onos-" + branchNoPrefix |
| } |
| } |
| |
| // given a branch with the prefix "onos-", returns the branch without the prefix |
| def removePrefixFromBranch( branchWithPrefix ){ |
| return branchWithPrefix.minus( "onos-" ) |
| } |
| |
| // ************* |
| // Test Category |
| // ************* |
| |
| // given a test category ("FUNC", "HA", etc.), returns all tests associated with that category |
| def getTestsFromCategory( category, tests=[:] ){ |
| testsFromCategoryResult = [:] |
| if ( tests == [:] ){ |
| tests = allTests |
| } |
| for ( String test_name in tests.keySet() ){ |
| if ( getCategoryOfTest( test_name ) == category ){ |
| testsFromCategoryResult.put( test_name, tests[ test_name ] ) |
| } |
| } |
| return testsFromCategoryResult |
| } |
| |
| // given the test name, returns the category (FUNC, HA, etc.) of that test |
| def getCategoryOfTest( test_name, tests=[:] ){ |
| if ( tests == [:] ){ |
| tests = allTests |
| } |
| return tests[ test_name ][ "category" ] |
| } |
| |
| // returns all categories of all tests, or the given test list |
| def getAllTestCategories( tests=[:] ){ |
| testCategoriesResult = [] |
| if ( tests == [:] ){ |
| tests = allTests |
| } |
| for ( String test_name in tests.keySet() ){ |
| category = getCategoryOfTest( test_name, tests ) |
| if ( !testCategoriesResult.contains( category ) ){ |
| testCategoriesResult += category |
| } |
| } |
| return testCategoriesResult |
| } |
| |
| // ******************** |
| // Test Schedule / Days |
| // ******************** |
| |
| // given a day, returns schedules that contain that day |
| def getValidSchedules( day ){ |
| validSchedules = [] |
| for ( String key in schedules.keySet() ){ |
| if ( schedules[ key ].contains( day ) ){ |
| validSchedules += key |
| } |
| } |
| return validSchedules |
| } |
| |
| // given a day, returns all tests that run on the given day on the given branch |
| def getTestsFromDay( day, tests=[:] ){ |
| resultDict = [:] |
| if ( tests == [:] ){ |
| tests = allTests |
| } |
| validSchedules = getValidSchedules( day ) |
| for ( String key in tests.keySet() ){ |
| scheduleProperty = getTestScheduleProperty( key, "day", tests ) |
| for ( b in scheduleProperty.keySet() ){ |
| if ( validSchedules.contains( scheduleProperty[ b ] ) ){ |
| resultDict.put( key, tests[ key ] ) |
| break |
| } |
| } |
| } |
| return resultDict |
| } |
| |
| // ********** |
| // Node Label |
| // ********** |
| |
| // Given a node label and branch, return all tests that run on that node. |
| def getTestsFromNodeLabel( nodeLabel, branch, tests=[:] ){ |
| nodeLabelTestsResult = [:] |
| if ( tests == [:] ){ |
| tests = allTests |
| } |
| for ( String key in tests.keySet() ){ |
| branchNodeLabelMap = getTestScheduleProperty( key, "nodeLabel", tests ) |
| if ( branchNodeLabelMap[ convertBranchToBranchCode( branch ) ] == nodeLabel ){ |
| nodeLabelTestsResult.put( key, tests[ key ] ) |
| } |
| } |
| return nodeLabelTestsResult |
| } |
| |
| // Given a test name and branch, return the node label associated. |
| def getNodeLabel( test_name, branch, tests=[:] ){ |
| if ( tests == [:] ){ |
| tests = allTests |
| } |
| result = getTestScheduleProperty( test_name, "nodeLabel", tests ) |
| if ( result == [:] ){ |
| return "UNKNOWN" |
| } else { |
| return result[ convertBranchToBranchCode( branch ) ] |
| } |
| } |
| |
| // given a branch, returns all nodeLabels from all tests, or a given test list |
| def getAllNodeLabels( branch, tests=[:] ){ |
| nodeLabelResult = [] |
| if ( tests == [:] ){ |
| tests = allTests |
| } |
| for ( test_name in tests.keySet() ){ |
| nodeLabel = getNodeLabel( test_name, branch, tests ) |
| if ( !nodeLabelResult.contains( nodeLabel ) && nodeLabel != null ){ |
| nodeLabelResult += nodeLabel |
| } |
| } |
| return nodeLabelResult |
| } |
| |
| return this |