From f741cba292f9d247176dd66e10c70e2e5ff17567 Mon Sep 17 00:00:00 2001 From: Moiz Habibi Date: Thu, 21 Nov 2024 16:49:45 -0500 Subject: [PATCH] initial commit --- .github/ISSUE_TEMPLATE/bug_report.md | 30 + .github/ISSUE_TEMPLATE/feature_request.md | 22 + .github/ISSUE_TEMPLATE/task-tracking.md | 21 + .github/workflows/gh-pages.yml | 18 + .gitignore | 7 + docs/css/bootstrap.min.css | 6 + docs/css/cucumber.css | 255 + docs/css/font-awesome.min.css | 4 + docs/fonts/FontAwesome.otf | Bin 0 -> 124988 bytes docs/fonts/fontawesome-webfont.eot | Bin 0 -> 76518 bytes docs/fonts/fontawesome-webfont.svg | 685 + docs/fonts/fontawesome-webfont.ttf | Bin 0 -> 152796 bytes docs/fonts/fontawesome-webfont.woff | Bin 0 -> 90412 bytes docs/fonts/fontawesome-webfont.woff2 | Bin 0 -> 71896 bytes docs/fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes docs/fonts/glyphicons-halflings-regular.svg | 288 + docs/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes docs/fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes docs/fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes docs/images/favicon.png | Bin 0 -> 3508 bytes docs/index.html | 10 + docs/js/Chart.min.js | 7 + docs/js/bootstrap.min.js | 6 + docs/js/jquery.min.js | 2 + docs/js/jquery.tablesorter.min.js | 5 + docs/js/moment.min.js | 7 + docs/overview-failures.html | 125 + docs/overview-features.html | 1860 +++ docs/overview-steps.html | 7173 ++++++++ docs/overview-tags.html | 1579 ++ docs/report-feature_10_2950166908.html | 331 + docs/report-feature_11_1704432389.html | 331 + docs/report-feature_12_1578193960.html | 2519 +++ docs/report-feature_13_1337672881.html | 1978 +++ docs/report-feature_14_3825185714.html | 1203 ++ docs/report-feature_15_3482636094.html | 722 + docs/report-feature_16_3183573638.html | 1390 ++ docs/report-feature_17_1209920628.html | 891 + docs/report-feature_18_1735824285.html | 555 + docs/report-feature_19_1983667711.html | 555 + docs/report-feature_1_3412998821.html | 1764 ++ docs/report-feature_20_1962376643.html | 582 + docs/report-feature_21_1652764441.html | 943 ++ docs/report-feature_22_3127520627.html | 722 + docs/report-feature_23_1052793861.html | 1412 ++ docs/report-feature_24_2864640430.html | 1412 ++ docs/report-feature_25_3441678139.html | 776 + docs/report-feature_26_2996978787.html | 555 + docs/report-feature_27_1247300435.html | 775 + docs/report-feature_28_2913438643.html | 1514 ++ docs/report-feature_29_548729583.html | 886 + docs/report-feature_2_68740289.html | 331 + docs/report-feature_30_1160643803.html | 1148 ++ docs/report-feature_31_2748063226.html | 2340 +++ docs/report-feature_32_739496672.html | 1619 ++ docs/report-feature_33_1595417207.html | 776 + docs/report-feature_34_1912849072.html | 1302 ++ docs/report-feature_35_2033951047.html | 1611 ++ docs/report-feature_36_739496672.html | 2151 +++ docs/report-feature_37_1595417207.html | 776 + docs/report-feature_38_962221290.html | 3538 ++++ docs/report-feature_39_518244277.html | 441 + docs/report-feature_3_3123976620.html | 1303 ++ docs/report-feature_40_3864579381.html | 358 + docs/report-feature_4120806554.html | 1845 +++ docs/report-feature_41_4078915426.html | 497 + docs/report-feature_42_3960257412.html | 358 + docs/report-feature_43_3390860467.html | 2112 +++ docs/report-feature_44_1343427850.html | 926 ++ docs/report-feature_45_357579510.html | 763 + docs/report-feature_46_1418567896.html | 1033 ++ docs/report-feature_47_1039047146.html | 1029 ++ docs/report-feature_48_1516586017.html | 3258 ++++ docs/report-feature_49_3366736176.html | 1374 ++ docs/report-feature_4_4233289457.html | 451 + docs/report-feature_50_553965108.html | 2221 +++ docs/report-feature_51_1090875135.html | 1627 ++ docs/report-feature_52_1561371593.html | 11107 +++++++++++++ docs/report-feature_53_609867244.html | 10316 ++++++++++++ docs/report-feature_54_3859907491.html | 360 + docs/report-feature_55_295727174.html | 507 + docs/report-feature_56_4087148730.html | 7314 +++++++++ docs/report-feature_57_257357963.html | 715 + docs/report-feature_58_83165716.html | 825 + docs/report-feature_59_1399534327.html | 3280 ++++ docs/report-feature_5_1227621674.html | 425 + docs/report-feature_60_2443039238.html | 8491 ++++++++++ docs/report-feature_61_2978080901.html | 1027 ++ docs/report-feature_62_2444692509.html | 1411 ++ docs/report-feature_63_348107189.html | 13569 ++++++++++++++++ docs/report-feature_64_794660781.html | 898 + docs/report-feature_65_909504347.html | 2661 +++ docs/report-feature_66_2707998939.html | 738 + docs/report-feature_67_1886511388.html | 1027 ++ docs/report-feature_68_2005685886.html | 1447 ++ docs/report-feature_69_2919427863.html | 657 + docs/report-feature_6_1147081753.html | 1404 ++ docs/report-feature_70_1253645552.html | 615 + docs/report-feature_71_3893931962.html | 521 + docs/report-feature_72_3540758248.html | 1172 ++ docs/report-feature_73_3983013774.html | 424 + docs/report-feature_74_3171037600.html | 424 + docs/report-feature_75_2309312465.html | 424 + docs/report-feature_76_216510772.html | 358 + docs/report-feature_77_132837459.html | 1195 ++ docs/report-feature_78_2457387545.html | 400 + docs/report-feature_79_2561494426.html | 439 + docs/report-feature_7_1704432389.html | 331 + docs/report-feature_80_1787878218.html | 6814 ++++++++ docs/report-feature_81_2383550879.html | 6138 +++++++ docs/report-feature_82_3993744635.html | 1331 ++ docs/report-feature_83_3276506490.html | 534 + docs/report-feature_84_1508648878.html | 358 + docs/report-feature_85_1117850475.html | 397 + docs/report-feature_86_3988161628.html | 1429 ++ docs/report-feature_8_68740289.html | 331 + docs/report-feature_9_1227621674.html | 425 + docs/report-tag_1015512771.html | 1192 ++ docs/report-tag_103602359.html | 3783 +++++ docs/report-tag_1053334888.html | 347 + docs/report-tag_1055767110.html | 6482 ++++++++ docs/report-tag_1056078597.html | 3319 ++++ docs/report-tag_1173533342.html | 345 + docs/report-tag_1180706285.html | 733 + docs/report-tag_1295720222.html | 430 + docs/report-tag_1434588790.html | 1371 ++ docs/report-tag_1450874259.html | 1436 ++ docs/report-tag_1651092133.html | 1026 ++ docs/report-tag_1786658399.html | 710 + docs/report-tag_1909816829.html | 4125 +++++ docs/report-tag_1984510830.html | 411 + docs/report-tag_2034880750.html | 1783 ++ docs/report-tag_2062445281.html | 9048 +++++++++++ docs/report-tag_2149488615.html | 6078 +++++++ docs/report-tag_2154082493.html | 3581 ++++ docs/report-tag_2178235536.html | 7747 +++++++++ docs/report-tag_2180660594.html | 345 + docs/report-tag_2207562106.html | 882 + docs/report-tag_2210115527.html | 648 + docs/report-tag_2210183619.html | 8094 +++++++++ docs/report-tag_2245788895.html | 498 + docs/report-tag_2307663156.html | 1036 ++ docs/report-tag_2319563519.html | 1030 ++ docs/report-tag_2355135623.html | 1870 +++ docs/report-tag_2373081817.html | 618 + docs/report-tag_2436226121.html | 345 + docs/report-tag_2491591471.html | 3461 ++++ docs/report-tag_2598937476.html | 1662 ++ docs/report-tag_2617993442.html | 6023 +++++++ docs/report-tag_2715732947.html | 525 + docs/report-tag_2731264660.html | 488 + docs/report-tag_2765899832.html | 6261 +++++++ docs/report-tag_2897414661.html | 1641 ++ docs/report-tag_2900739572.html | 552 + docs/report-tag_2970363145.html | 606 + docs/report-tag_2980880317.html | 1535 ++ docs/report-tag_3002544189.html | 1145 ++ docs/report-tag_3106110887.html | 438 + docs/report-tag_3239414571.html | 428 + docs/report-tag_3326046676.html | 471 + docs/report-tag_3398828705.html | 550 + docs/report-tag_3417977816.html | 318 + docs/report-tag_3434149318.html | 1377 ++ docs/report-tag_344413221.html | 1484 ++ docs/report-tag_3512359318.html | 6953 ++++++++ docs/report-tag_3553763541.html | 7437 +++++++++ docs/report-tag_3560124299.html | 1206 ++ docs/report-tag_364301381.html | 10439 ++++++++++++ docs/report-tag_3710634265.html | 430 + docs/report-tag_3944372549.html | 2064 +++ docs/report-tag_3955439317.html | 780 + docs/report-tag_3959935800.html | 3461 ++++ docs/report-tag_3988296456.html | 1797 ++ docs/report-tag_3999554409.html | 412 + docs/report-tag_4020296611.html | 976 ++ docs/report-tag_4026948729.html | 618 + docs/report-tag_4028791651.html | 1318 ++ docs/report-tag_4036377308.html | 1450 ++ docs/report-tag_4037672626.html | 1325 ++ docs/report-tag_4049928517.html | 2004 +++ docs/report-tag_4064753010.html | 385 + docs/report-tag_4087693520.html | 511 + docs/report-tag_4129542577.html | 1338 ++ docs/report-tag_4194876213.html | 1026 ++ docs/report-tag_4255535051.html | 898 + docs/report-tag_45975834.html | 3309 ++++ docs/report-tag_523180974.html | 684 + docs/report-tag_542955574.html | 762 + docs/report-tag_816677756.html | 2256 +++ docs/report-tag_851523122.html | 1289 ++ docs/report-tag_893087316.html | 1418 ++ docs/report-tag_893540442.html | 725 + docs/report-tag_949408484.html | 893 + docs/report-tag_972537373.html | 430 + docs/report-tag_99023576.html | 8023 +++++++++ 195 files changed, 326248 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/task-tracking.md create mode 100644 .github/workflows/gh-pages.yml create mode 100644 .gitignore create mode 100755 docs/css/bootstrap.min.css create mode 100755 docs/css/cucumber.css create mode 100755 docs/css/font-awesome.min.css create mode 100755 docs/fonts/FontAwesome.otf create mode 100755 docs/fonts/fontawesome-webfont.eot create mode 100755 docs/fonts/fontawesome-webfont.svg create mode 100755 docs/fonts/fontawesome-webfont.ttf create mode 100755 docs/fonts/fontawesome-webfont.woff create mode 100755 docs/fonts/fontawesome-webfont.woff2 create mode 100755 docs/fonts/glyphicons-halflings-regular.eot create mode 100755 docs/fonts/glyphicons-halflings-regular.svg create mode 100755 docs/fonts/glyphicons-halflings-regular.ttf create mode 100755 docs/fonts/glyphicons-halflings-regular.woff create mode 100755 docs/fonts/glyphicons-halflings-regular.woff2 create mode 100755 docs/images/favicon.png create mode 100644 docs/index.html create mode 100755 docs/js/Chart.min.js create mode 100755 docs/js/bootstrap.min.js create mode 100755 docs/js/jquery.min.js create mode 100755 docs/js/jquery.tablesorter.min.js create mode 100755 docs/js/moment.min.js create mode 100755 docs/overview-failures.html create mode 100755 docs/overview-features.html create mode 100755 docs/overview-steps.html create mode 100755 docs/overview-tags.html create mode 100755 docs/report-feature_10_2950166908.html create mode 100755 docs/report-feature_11_1704432389.html create mode 100755 docs/report-feature_12_1578193960.html create mode 100755 docs/report-feature_13_1337672881.html create mode 100755 docs/report-feature_14_3825185714.html create mode 100755 docs/report-feature_15_3482636094.html create mode 100755 docs/report-feature_16_3183573638.html create mode 100755 docs/report-feature_17_1209920628.html create mode 100755 docs/report-feature_18_1735824285.html create mode 100755 docs/report-feature_19_1983667711.html create mode 100755 docs/report-feature_1_3412998821.html create mode 100755 docs/report-feature_20_1962376643.html create mode 100755 docs/report-feature_21_1652764441.html create mode 100755 docs/report-feature_22_3127520627.html create mode 100755 docs/report-feature_23_1052793861.html create mode 100755 docs/report-feature_24_2864640430.html create mode 100755 docs/report-feature_25_3441678139.html create mode 100755 docs/report-feature_26_2996978787.html create mode 100755 docs/report-feature_27_1247300435.html create mode 100755 docs/report-feature_28_2913438643.html create mode 100755 docs/report-feature_29_548729583.html create mode 100755 docs/report-feature_2_68740289.html create mode 100755 docs/report-feature_30_1160643803.html create mode 100755 docs/report-feature_31_2748063226.html create mode 100755 docs/report-feature_32_739496672.html create mode 100755 docs/report-feature_33_1595417207.html create mode 100755 docs/report-feature_34_1912849072.html create mode 100755 docs/report-feature_35_2033951047.html create mode 100755 docs/report-feature_36_739496672.html create mode 100755 docs/report-feature_37_1595417207.html create mode 100755 docs/report-feature_38_962221290.html create mode 100755 docs/report-feature_39_518244277.html create mode 100755 docs/report-feature_3_3123976620.html create mode 100755 docs/report-feature_40_3864579381.html create mode 100755 docs/report-feature_4120806554.html create mode 100755 docs/report-feature_41_4078915426.html create mode 100755 docs/report-feature_42_3960257412.html create mode 100755 docs/report-feature_43_3390860467.html create mode 100755 docs/report-feature_44_1343427850.html create mode 100755 docs/report-feature_45_357579510.html create mode 100755 docs/report-feature_46_1418567896.html create mode 100755 docs/report-feature_47_1039047146.html create mode 100755 docs/report-feature_48_1516586017.html create mode 100755 docs/report-feature_49_3366736176.html create mode 100755 docs/report-feature_4_4233289457.html create mode 100755 docs/report-feature_50_553965108.html create mode 100755 docs/report-feature_51_1090875135.html create mode 100755 docs/report-feature_52_1561371593.html create mode 100755 docs/report-feature_53_609867244.html create mode 100755 docs/report-feature_54_3859907491.html create mode 100755 docs/report-feature_55_295727174.html create mode 100755 docs/report-feature_56_4087148730.html create mode 100755 docs/report-feature_57_257357963.html create mode 100755 docs/report-feature_58_83165716.html create mode 100755 docs/report-feature_59_1399534327.html create mode 100755 docs/report-feature_5_1227621674.html create mode 100755 docs/report-feature_60_2443039238.html create mode 100755 docs/report-feature_61_2978080901.html create mode 100755 docs/report-feature_62_2444692509.html create mode 100755 docs/report-feature_63_348107189.html create mode 100755 docs/report-feature_64_794660781.html create mode 100755 docs/report-feature_65_909504347.html create mode 100755 docs/report-feature_66_2707998939.html create mode 100755 docs/report-feature_67_1886511388.html create mode 100755 docs/report-feature_68_2005685886.html create mode 100755 docs/report-feature_69_2919427863.html create mode 100755 docs/report-feature_6_1147081753.html create mode 100755 docs/report-feature_70_1253645552.html create mode 100755 docs/report-feature_71_3893931962.html create mode 100755 docs/report-feature_72_3540758248.html create mode 100755 docs/report-feature_73_3983013774.html create mode 100755 docs/report-feature_74_3171037600.html create mode 100755 docs/report-feature_75_2309312465.html create mode 100755 docs/report-feature_76_216510772.html create mode 100755 docs/report-feature_77_132837459.html create mode 100755 docs/report-feature_78_2457387545.html create mode 100755 docs/report-feature_79_2561494426.html create mode 100755 docs/report-feature_7_1704432389.html create mode 100755 docs/report-feature_80_1787878218.html create mode 100755 docs/report-feature_81_2383550879.html create mode 100755 docs/report-feature_82_3993744635.html create mode 100755 docs/report-feature_83_3276506490.html create mode 100755 docs/report-feature_84_1508648878.html create mode 100755 docs/report-feature_85_1117850475.html create mode 100755 docs/report-feature_86_3988161628.html create mode 100755 docs/report-feature_8_68740289.html create mode 100755 docs/report-feature_9_1227621674.html create mode 100755 docs/report-tag_1015512771.html create mode 100755 docs/report-tag_103602359.html create mode 100755 docs/report-tag_1053334888.html create mode 100755 docs/report-tag_1055767110.html create mode 100755 docs/report-tag_1056078597.html create mode 100755 docs/report-tag_1173533342.html create mode 100755 docs/report-tag_1180706285.html create mode 100755 docs/report-tag_1295720222.html create mode 100755 docs/report-tag_1434588790.html create mode 100755 docs/report-tag_1450874259.html create mode 100755 docs/report-tag_1651092133.html create mode 100755 docs/report-tag_1786658399.html create mode 100755 docs/report-tag_1909816829.html create mode 100755 docs/report-tag_1984510830.html create mode 100755 docs/report-tag_2034880750.html create mode 100755 docs/report-tag_2062445281.html create mode 100755 docs/report-tag_2149488615.html create mode 100755 docs/report-tag_2154082493.html create mode 100755 docs/report-tag_2178235536.html create mode 100755 docs/report-tag_2180660594.html create mode 100755 docs/report-tag_2207562106.html create mode 100755 docs/report-tag_2210115527.html create mode 100755 docs/report-tag_2210183619.html create mode 100755 docs/report-tag_2245788895.html create mode 100755 docs/report-tag_2307663156.html create mode 100755 docs/report-tag_2319563519.html create mode 100755 docs/report-tag_2355135623.html create mode 100755 docs/report-tag_2373081817.html create mode 100755 docs/report-tag_2436226121.html create mode 100755 docs/report-tag_2491591471.html create mode 100755 docs/report-tag_2598937476.html create mode 100755 docs/report-tag_2617993442.html create mode 100755 docs/report-tag_2715732947.html create mode 100755 docs/report-tag_2731264660.html create mode 100755 docs/report-tag_2765899832.html create mode 100755 docs/report-tag_2897414661.html create mode 100755 docs/report-tag_2900739572.html create mode 100755 docs/report-tag_2970363145.html create mode 100755 docs/report-tag_2980880317.html create mode 100755 docs/report-tag_3002544189.html create mode 100755 docs/report-tag_3106110887.html create mode 100755 docs/report-tag_3239414571.html create mode 100755 docs/report-tag_3326046676.html create mode 100755 docs/report-tag_3398828705.html create mode 100755 docs/report-tag_3417977816.html create mode 100755 docs/report-tag_3434149318.html create mode 100755 docs/report-tag_344413221.html create mode 100755 docs/report-tag_3512359318.html create mode 100755 docs/report-tag_3553763541.html create mode 100755 docs/report-tag_3560124299.html create mode 100755 docs/report-tag_364301381.html create mode 100755 docs/report-tag_3710634265.html create mode 100755 docs/report-tag_3944372549.html create mode 100755 docs/report-tag_3955439317.html create mode 100755 docs/report-tag_3959935800.html create mode 100755 docs/report-tag_3988296456.html create mode 100755 docs/report-tag_3999554409.html create mode 100755 docs/report-tag_4020296611.html create mode 100755 docs/report-tag_4026948729.html create mode 100755 docs/report-tag_4028791651.html create mode 100755 docs/report-tag_4036377308.html create mode 100755 docs/report-tag_4037672626.html create mode 100755 docs/report-tag_4049928517.html create mode 100755 docs/report-tag_4064753010.html create mode 100755 docs/report-tag_4087693520.html create mode 100755 docs/report-tag_4129542577.html create mode 100755 docs/report-tag_4194876213.html create mode 100755 docs/report-tag_4255535051.html create mode 100755 docs/report-tag_45975834.html create mode 100755 docs/report-tag_523180974.html create mode 100755 docs/report-tag_542955574.html create mode 100755 docs/report-tag_816677756.html create mode 100755 docs/report-tag_851523122.html create mode 100755 docs/report-tag_893087316.html create mode 100755 docs/report-tag_893540442.html create mode 100755 docs/report-tag_949408484.html create mode 100755 docs/report-tag_972537373.html create mode 100755 docs/report-tag_99023576.html diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..9aac011 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,30 @@ +--- +name: Bug report +about: Create a report to help us improve +title: 'BUG:' +labels: bug +assignees: '' + +--- + +## Description +A clear and concise description of what the bug is, including the current behavior. + +## Steps to Reproduce +Clear, specific, and detailed steps taken to enable reproduction of the bug for investigation. +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +## Expected Behavior +A clear and concise description of the outcome you expected from the actions taken. + +## Actual Behavior +A clear and concise description of the outcome you experienced from the actions taken. + +## Additional Context +- Log output +- Screenshots (if applicable) +- Solution Baseline Version +- Environment details (local, cloud, Azure, AWS, etc.) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..224c421 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- +name: Feature request +about: Suggest a feature for this project +title: 'Feature:' +labels: enhancement +assignees: '' + +--- + +## Description +A clear and concise description of the new feature. It can include what the problem is and what you want to happen, and is preferably focused on the business context or how this impacts downstream users. + +## DOD +Acceptance criteria required to realize the requested feature +- [ ] Using checkboxes helps to communicate progress + +## Test Strategy/Script +How will this feature be verified? + +## References/Additional Context +A clear and concise description of any alternative solutions or features you've considered. +Add any other context, links, or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/task-tracking.md b/.github/ISSUE_TEMPLATE/task-tracking.md new file mode 100644 index 0000000..a4c413a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/task-tracking.md @@ -0,0 +1,21 @@ +--- +name: Task tracking +about: Support activities that are not typically code related +title: 'TASK:' +labels: task +assignees: '' + +--- + +## Description +A clear and concise description of the work to be done. + +## DOD +Acceptance criteria required to complete the work +- [ ] Using checkboxes helps to communicate progress + +## Test Strategy/Script +How will this item be verified? + +## References/Additional Context +As needed diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..2f2ed4f --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,18 @@ +name: Delpoy to GitHub Pages + +on: + push: + branches: + - dev # Set a branch name to trigger deployment + +jobs: + deploy: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs + destination_dir: cucumber-html-reports \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6f5bdd2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +# Default ignored files +/shelf/ +/.idea/workspace.xml + +# IntelliJ files +*.iml +*.idea diff --git a/docs/css/bootstrap.min.css b/docs/css/bootstrap.min.css new file mode 100755 index 0000000..5b96335 --- /dev/null +++ b/docs/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:"Glyphicons Halflings";src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;background-image:none;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/docs/css/cucumber.css b/docs/css/cucumber.css new file mode 100755 index 0000000..24e3541 --- /dev/null +++ b/docs/css/cucumber.css @@ -0,0 +1,255 @@ +body { + /* Shifts body so navigation bar does not overlap it. + Make sure to include this after the core Bootstrap CSS. */ + padding-top: 60px; + overflow-y: overlay; +} + +h2 { + font-size: 24px; +} + +a { + color: #0097da; +} + +a:hover { + color: #00587f; +} + +.header-tag-name { + color: gray; + font-style: italic; +} + +.keyword { + font-weight: bold; +} + +.argument { + font-weight: bold; +} + +.indention { + padding-left: 3px; +} + +.inner-level { + margin-top: 5px; + margin-left: 20px; + padding-bottom: 2px; + padding-left: 1px; +} + +.element { + margin-bottom: 15px; + padding-left: 3px; +} + +/* left line along each section */ +.element, .steps, .hooks-after, .hooks-before { + box-shadow: -1px 0 lightgray; + transition: box-shadow 0.3s; +} +.element:hover, .steps:hover, .hooks-after:hover, .hooks-before:hover { + box-shadow: -3px 0 #6ce; +} + +.description, .comment { + font-style: italic; + background-color: beige; + white-space: pre; +} + +.message, .output, .embedding { + background-color: #dfdfdf; + overflow: auto; +} + +/* + same as
 from bootstrap library.
+   padding and overflow-x added.
+*/
+.embedding-content {
+    padding: 10px;
+    margin-left: 10px;
+    margin-right: 10px;
+    margin-bottom: 10px;
+    font-size: 13px;
+    overflow-x: auto;
+    line-height: 1.42857143;
+    color: #333;
+    word-break: break-all;
+    word-wrap: break-word;
+    background-color: #f5f5f5;
+    border: 1px solid #ccc;
+    border-radius: 4px;
+}
+
+.html-content {
+    position: relative;
+    /* proportion value to aspect ratio 16:9 (9 / 16 = 0.5625 or 56.25%) */
+    padding: 0 0 56.25%;
+    height: 0;
+    overflow: hidden;
+}
+
+.html-content iframe {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    border:none;
+}
+
+.download-button {
+    float: right;
+    margin-right: 10px;
+    color: #333;
+}
+
+/* names of those classes must be the same as name of the statuses (to lower case) in Status class  */
+.passed {
+    background-color: #92DD96;
+}
+
+.failed {
+    background-color: #F2928C;
+}
+
+.skipped {
+    background-color: #8AF;
+}
+
+.pending {
+    background-color: #F5F28F;
+}
+
+.undefined {
+    background-color: #F5B975;
+}
+
+/** additional space before Given keyword to keep space between steps **/
+.step-name-Given {
+    margin-top: 5px;
+}
+
+.step-name-And {
+    padding-left: 10px;
+}
+
+.lead-duration {
+    float: right;
+    padding-right: 15px;
+}
+
+table.stats-table {
+    background-color: white;
+    color: black;
+    margin-bottom: 20px;
+    width: 100%;
+}
+
+table.stats-table th, table.stats-table td {
+    border: 1px solid gray;
+    padding: 5px;
+    text-align: center;
+}
+
+table.stats-table tr.header {
+    background-color: #66CCEE;
+}
+
+table.stats-table tfoot {
+    font-weight: bold;
+}
+
+tfoot.total, td.total, th.total {
+    background-color: lightgray;
+}
+
+table.stats-table td.duration {
+    text-align: right;
+    white-space: nowrap;
+}
+
+table.stats-table td.tagname {
+    text-align: left;
+}
+
+table.stats-table td.location, .location {
+    font-family: monospace;
+    text-align: left;
+}
+
+table.step-arguments {
+    margin-bottom: 5px;
+    margin-left: 25px;
+    margin-top: 3px;
+}
+
+table.step-arguments th, table.step-arguments td {
+    border: 1px solid gray;
+    padding: 3px;
+    text-align: left;
+}
+
+table#tablesorter thead tr:not(.dont-sort) th {
+    cursor: pointer;
+}
+
+tr:hover {
+    transition: background-color 0.3s;
+}
+
+.collapsable-control {
+    cursor: pointer;
+}
+
+.chevron:after {
+    content: "\f078";
+}
+
+.collapsed .chevron:after {
+    content: "\f054";
+}
+
+.footer {
+    font-size: smaller;
+    text-align: center;
+    margin-top: 30px;
+}
+
+
+
+/* Custom Bootstrap CSS overloading. */
+.carousel-indicators {
+    bottom: 0;
+}
+
+.carousel-indicators li {
+    border: 1px solid black;
+}
+
+.carousel-indicators .active {
+    background-color: black;
+}
+
+.carousel-control {
+    font-size: 40px;
+    padding-top: 150px;;
+}
+
+.carousel-control.right, .carousel-control.left {
+    background-image: none;
+    color: #eee;
+}
+
+pre {
+    margin: 10px;
+}
+
+#footer {
+    padding-right: 20px;
+}
diff --git a/docs/css/font-awesome.min.css b/docs/css/font-awesome.min.css
new file mode 100755
index 0000000..9b27f8e
--- /dev/null
+++ b/docs/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.6.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/docs/fonts/FontAwesome.otf b/docs/fonts/FontAwesome.otf
new file mode 100755
index 0000000000000000000000000000000000000000..d4de13e832d567ff29c5b4e9561b8c370348cc9c
GIT binary patch
literal 124988
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ÐT?>-5aYhU|+1c>&YMpPK5x#-mbV
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'NS^o{z1ZKlHsAybrl=JE7AP369ntV%vB
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
CDx5C>

literal 0
HcmV?d00001

diff --git a/docs/fonts/fontawesome-webfont.eot b/docs/fonts/fontawesome-webfont.eot
new file mode 100755
index 0000000000000000000000000000000000000000..c7b00d2ba8896fd29de846b19f89fcf0d56ad152
GIT binary patch
literal 76518
zcmZ^JRZtvU(B;hF?rsAN?(R0YJHg%EL-4`f-QC?GxVuBJBzSNO0TKw=Z@2d0uiDz~
z>N?%0@9pZhTXpN4G6MmC{{r-%!vp@O0Rbuhwcr6N8vm31-}!&^|1owS^ws~H{tqAo
z$N}5{t^jX<6yPJk2H^Ey%R&Bp#T5O1phx10RX7B{Qt8t9Pl**$n*kadIQ|f;xC*hEUn@g
zl*^#1p2$%G{Blbw#9Q*e6@DYa223V18Ij|2&2%cPTvx@iNioUoZ)_KE6Q5=~WJfZ6
z@6#n=xTLp0OA@il+i|so^fL%AHC3|sOKFq@_?XQai){2qkS}rMNBrJi`>xR3*k)Ld4_O*y=YyU9%ULX8Mt|3PGQJ(=
zu5_-C{h(64@}ws=y4%mO#^-0|S)8jKTS}tyTCRrQ#rm0C*{&43?>G$we1bThm2RqW
zr0DH!n;Ru#`mDbNA2wM$;x!?!a`4fw?Fo~yus67&r1abr>%F0xMWMH?N|{wiNZ+FY
zi_q&l)sRzB{O=MeHnz?|4E!7NzLgZx?>wKfMy~TrDUE27f?^!K0pcyz
zKgVg~jz3oin*6AlFIecSs@o*bYRurv(wa@E+g$K~!LjVYF|>8*mz38zvT0|~_Z9-@
zFpwD~_2L(!Y&LKA6%F~|!5SJ(mBsg47{V^nyZ*x17OEqVyB;cG?Qs2f_ZtmwuJ*$;
zrV4&09S>ZcsCt|3)l&E7&8T&q9=-bJiHDK3=i=dX9doW52uEMp^BA|^$Stu
z_bobQ9n=z83Z~xpsct18Hw06@v%p4TXJGmaJEDy&(-v74j^{YHE3)iSLyj)+MAzaq
zSB+BK=7$bIV5~T@od+AQJY2H9n&J;sL(S53?(5d<&xHEKF#(AEjDF0n9Jl27)uNRn
z=Zqk(EM~|62JY~o@N;`C!oum~!C=AiA|~s%&&Ik>G**GymPqvB`PYqZ;u*QIa+@iL!)+*8P-7K
zBA6oelJuQCvn?-o2%~luo8?Xb+G!NZ!7(~d1g2ttZM_#V^1$i{p!Qb*N$?!^+u*hF
zV7O^eAoMadrY~~UdHTy?%pjJPqalWC^&_g56Y~m9&?E}nU5>dTmN*NFuSg;4cIJNE
z2^EiW?@vNZ#r%d;BJ`>nq>m?N?9aCRC>Eh
zlV6Ugn6XebS>cYT-zx{MC|>X&wjrrzRb@<5rN9sBgK3+zcK*f~#(jWcq}V82ZaN6!
z3x!(uoZC?rX`+`TZExW@B_Jd`o0*~rUKsn%1&5+DXP_)=VVN6Rw_<%|IIeJXU{K?4
zkvpJ6ee4r5g*02SaFM0f$+GrDNoKlJ$fXCjeyCd_b;&|GDk?G#%7IhpGA~XrsRNoT
zSn_IST!)8|RdNz{EK?$GHsh7BU%UL{N}W5${L)#YgMB{m(WaRfq+Ozk=>6yo6i(u{
zf(b&PyZaNLrRm8d?nLwm4RCW`F=y{wXwBU<1oh#53u%tXKBrZtC;g$CQwJ|3=?DCD
zerFLv5RFMpC{V>kQ+TCYW{$YVXPdLvhk1i?2BH7*5zlBC=Eg2pWli#0yzi%PDl04!
zX&Dv67bLYow-X+mpm<KPeKlSsQEOh60QCqd>_Y|7@=xfK+ngw^
zD9o5yHpH4sx!(oAf3Z~ut%84X+V41Y!;?fEQq#q#+CzZ?=oBqWXmCht%;@0qn-pXU
z6&ZLq5MdGq=bNj3NOl3&${$YR2TE&Oh0hG0G2EOV^jo8A(1&RttcnDJzR-h1D#R0}zqpfOicY
zzq2MeIM+kW>E-B>q$uKRN2tGiHnK}WNo6&OL>_t;
zV1rZISSu}XgE-OkNg2_I@hb}1C?6<}M=_hc-{W8hM8NN;GYL+>#KK0dwCHrBex*Uqk)i)Dqd
zU#lhxdi%Txp@ah5XeFm?k7_Yodp
z-!k}ec>%eSm}S5O#=xIi$W$Rq_rR|K6>k|OA9X3z72fKks33U6BPZizFb_rTqPa<4
z;wu%~I7|kQWi{Idir_c6&L3<@%aS;uJbxr9td_oX+ztx@{eMop15cA&f
zZiD^v=IYY`&qlv@6!HQpzSQKsQBb<*bcP;=jaHWhB2F^2tHq%Km@FhCs
z{w($Y`FD&xEyPe52lc_;IpIF-4O|#a2C?nfX+bMIXiumj=O%J`M;E)dMDr)&@>{8C
z3)nyTY?5I}>~fhpzYH!hfU7Dx2qW9CttqrJKu+NeWg8bK1ldYw%>#
z7D=t1FVzX${`^Rx_Q-`n#>5qB3-9K1!*Xpt%P!%+rm=Mzdi@Jv-Mdm(4nCkDi1#eo>L7qH7Xc{4y>=Zeb+Acl}PCs
zP|AstTnUNT8LcRAh$XiY&;YtB)*~5^(DOj|p#-~{ESml1S>;0Ihcen0Y@f$jkYvz2
zlW{_1tCm4;RV=Sq@*X
zmZs7>+b|O^;)AHk%5D8>7yOUqk}r&jH`_jC_&4rN32Uik1G+>)%Ej{3OW%M*irgZsH)L#PyqEESx$?Bw
z(TuNjVL(pLO3PO3^)xyaV&7$hStYhzf%C&8Z|?JwE{VP%s5F$D11$(l8@ST;pbV_A!S5i<$-LImWb|qUoY(
zgN-4291V9tZkzizQhq=oU!hNIw6!x{8rpt=AC4u-pxG>Xjeqc9#7@E!m<4@k`?Xc3L
zGW*|?jHH~P{52A-aV(Q#{5es%%#G>8C-I`9`^(zDzJgCtLZ*03KIvH6jYvVe~m9=u?k})-Q$0N@CYmQMic;bnk2iJ>Vm8OKV6M&st{n4thcQ|8w
z7ghMeK(fX}mM?x8ly1=nqrOKo4P7{=2?9!(bUPhZ*cvf1)bY705uSXn9{deye9Jvelcco2b>1-ZJ}k
zFmR^35d_{lz01HTCO8%h4`fhpf)ySyi8hqDTcE(`V1*98k+0cyKPG&K99MoPzY8H%gq4+vdug@>y;9pP%`0(vW5A;I|G%#vZOyK?F
z*(Px`vSR3C5JU%x4YH49uOow^77PJrF!ST?xHI~)rAc748p=xY%*3S*Qe3gKQg@pK
z49qeg8DkFigyGW>y@|>zttBjSBN$SjknA5
z{#6t?XWP<2GvG6%gog<3*CmZL3)K(*_U>y|O^fpiv&bA|&5RY{7dxl^*^+goJg2=$S8q^swAAT(IoKD~`el<+KI_b*qBp>Acw-d+=MRc4pnDWkV_
zE<-7i*`{-C#UsdI++oxdg-81&2=U7rtwb-4H(MnnJFYlY>jaoE&5kQC`6+!hPo3Y=
zbuYPeeaqMB&TtQ&zTJL@@s|{*iX`!P3ws)`oD8McaxEUl1P{3{P07T?i$-JOq)JIq
zgRQ`>ilyi5qi{KImy=g-y`U>FT$K`LUty3n>wG0d8N(dMSlmUn^@~JG65S6ak|v%X
z>G(IGs&}$r%!vWT1Fm@Eha|%nDG3II4qI;L3SHk4It}(`fHB3W@{Sx7Sz$$dK@)6~
zEMrYY=)_JoWHFc&Jy?*ozRL{n7UPAF_`8^_cxG5<(O0-YRVl5KkW}e?m3H!uh08E4
zcuqC?kiQ;5F5;Uerw;!g2G^M+XHOwy8XWG2d~gLlX^queZie2A3fFhiW7Jlz$8JSG
zZRy9o7nLFKFwK`I7JA_bG3~WM_|p1alZ)@~b;MwEwv72`+N5ZECd|CyvsQNlYuxb%h{b6L)Yd4j
zJr90~RK>_YG^dJlW#khv(r~oQlosf#7ncRUWMR-q=P~X_f_i#ftf&oHchD~dt_g2A
z%SjtjfmS3Prw1h?V=Cl(OvJnPtL6{wwiNU}Qf(Vpe;`IjHGyRu^~q>>+p0uU2lw$x
zzX{EKe%A>2&+cpPB+z2=wR_UL_kp=Ktw&-BlZ(aDP&&}Rk9}#xnfy``eTj|gL?Rz;
zq5Rvq?aipr>Vy{d#RXNkh3YsJ+s}1u62e(X+T!j+fEOV-9x?NQ(Bk{uiNF@>*)Y@8
zK5|n2^0F4<(YBlU((CA|SGy|XtPpi{lvjSEv=Alv4>(f+IrX7c@bO2+5m;?P0&{fX
zxMlz*4#ik)>qCBM1YKaeT#(BXZ9Hf^y#EuDS{@-PIFz=<>Z4a
zaIz;#wAF~((i*{OJl~6H8L-h5knI+m*+y3Y)%XfVBDmPk^kz}>xpPodw4Vy%M+srn
zfa$)D7(JGeS`AZy<*vyv5lX1n@N`g>rDmI+t#5>9;vOmnHoYtg7Yv}5p7P2yCcRW|
zzlUBs$qrUX{3nw|v~_f`>(SgZ`Qa4+Tx1c*l+IzVLbwvDr;P1?$^^UUn!-^}@8Xnm
z%fd~=#ZUe-g`*?%S`N1GieL}Lb3o(#AsixR+*z4YGbFTgCQQT#pN*A}NAQIru4^_Q
zfGfqz&^(HDzlOh9nRMIRoK5pphXL(PjR^nzg-K|CT`_RkoAZ+(ni{!)1(8u4%#Ssa
zc8wPx(53`h2TV}su1f_>Xz;<;0JgxwSB_oVqd;c2Dhi)MZS6Xd44JM+PmT7)IS6ju
zrIlm;LReLX))zEtCvMC)>Sk4~wk0I`<4^kT@r8PsP{OfG?uC<28Hf$2oSF$cn$F+o
zG1)UiCyfq0t*RJBr7TA_ry@;aEmIS=;e)hq8My+vN-x70gEOKQIsIlGhsWQBCQ^h)
zW^)Cxr9?04EB4#0R0d^BS)IEzHm03mqmV4k(Y&49K$a)lfPC7}=$Pb{vS!aGJUz8u{xMruX(ZtQ$Vupj8u)z@a(<
zp2!MSE5l0Ph1{$p_A^p{yDwt=0Nu%Y}
zF5A7rB?;Mo@{eMwB!WE>5v-n-LtHT*sF}nfV1vaYt2(D26~VK_9Aos3VD(LL+qC(
zi;TPVQDWu#gBs})2zSe}9{sPpWd8|~1u=Jd*KFN%4FR`%Whxfr#}0H@%bbCFGAM^X*lh$E+~aZQ
zXaUMlg<>2!by_7y1^eYlKdJos+F357hHF;RLdIlp@q3ddq;(KnP;bE{U5|d;1@D=w
zV>w)+K=!izn^)|>yBED~
z5=r>LT7R54^@n!+@L61Y(Pw%uI-+@hw1~cV^8&2|fKr~4B(av!>$7
zrC(%zIs2pNRwxiKNbtMy$>
zWtRM|L$1SJq!e6jiW^Rw%*s1-A{;-ulF{wX!>~nrl)Gi7bim2+gGp_F6|cOET9-MC
zIR7|-f0wiM>m?Oe^MJ*h^Gy_KK5cFLI_lfek(OL?t(NJUzeC$3`DCWWB6oxc?t)4SW$=c1L-XR?gKjR6Z
z%?e3HKEkP$k8_FS8)D)1M++Ye?E;^@B2atFY;JXYNvE_jX|4nLe+4`QlIoU#r7-ZN
z9w%ORF!TdEE32>(PP*9f!4+1ypjF8X34VRdCG>HWCXSZ+4n3H)>6&dLmDWrcEa$2m$
z<{P|tfdhbDou2!+3#eDom0vm@rRTzdaNf?nr%1`}2fuAx?vw1XxNjyCVu`X4lfCPO
zQw{A&4#6$$$uk_U2))K_Xp5H)Ynj;M%OG+#5wovXa41ut|FriC
zZ5?nF#JuH|{ni@Rb1?Wt0L4ckFaEV!VW!ox)2vWV@m0ortHgG<(|&aztcf*qm+?!L
z)zAGm9oxG%PF6M%JF9lvlniIsGlaGwZ)XwlR?d=41aBnzLpe1FoItFRR;`$mDLx}A
zXs(tnZMYsu$8goUuhiJ6uK@{%@GO~1CH!K6;^W6x_<&#;VzU=8n&L{Tu=AvTmmg1Y
z%U|1*!pwm5>I!81otTNe4X4)T`r@h)MLmIfania|o4YiMP_|=}*4
zm_pWIwxkEH#`m|aw5Oj2cV-uB#SJ`daQMf&=~kRF@3xsN+UR(DDz5Yk8lDcaoW=`$
z;qNA4Vl#=JGw=*2{Zi7KlpC7JONZ1XD_bq&cHo~j$03Xtp1(JuD@k*#UgfxYMp_f1
zHeEc9Kcgq&|B5(vDZy+(Etf2hJ>k|_^m5d}rVF#m0M#V`Q9`v_-A*{>_qn*375dUg
z20xPEwUamwFwVaNtLQZ3gYac3D)sy^c<-eomp&)JqaRT_aA6r=N2r6`KOM+GMJ=uR
zJJSx}{}`IzagvLgClXz7Op`%JxJVWdnAdVtZ1L!MfIpFd5$mbn)VtpZ2Dq#c};nB58w+tL1@BkvVm+h71i)f_rIG$a3$o)nd2gZCgqZg~DGttbCOjwn?T1fRRA~iA+N6zr-;&
z7UpcL;{pJJf)iyuS*g7~6!ti&x@hgZ#xgHB8ZB0#Wgu+Hz!hHcArgMW)f)z%?s16(
zJeG`Z`(w!uZJjB~*T>P26oGK0$6Ra+4CRgGJkwbG9@u7+)h--#OMaS^94%|>j;>R~
zT%qfgW0)@wi&e~`^<*MZCoDx~+mYuARSCYEm>;`|buUuX)z=r)Q}WwRB&Vel;HOqY
zt?1$U*XyTspA5UDMs;VDIKkBMCB~1`(9)wALGvaW59!Wb3>nh!}Np-waLby1tarvXP0A|3ysMqsnTY
z7IT-5SgV|NZN3<9`r9|e9fK*l^~72~4KML@f2-=7XWD<6>M0GD5j6}OvWt#l46g@+
zBn=-(Fs@xS?n)J$Xr>RwZ_#oKk$->E5KPBlHq*q3&L}J6YBw6pbza1XN073{97~#q
zTReDJZ>6J@;i^yfR}+Lp_`&iT@`z?ozx07)PYkFJXy~x!aMN}S`gwL~_GHQp#>HGX
zc~A1Bx|bR2FLSL3hpVg$;3TbFS7q&}#y9$O_!03nh!J87!{4e)7zFtHXwl@hB7Ltnv=C{#bIp5A)l^z}mW$@fR7r0bAlUmCVRMlibs5x5Fq4U26
zSFZIg+>*5IGz!0zBUOpKJ^_PQ{#c44>MBlmvZ+1}#mCe>UnZt2iU;`b4=Ks`%8=u9
z$TmiTS2eHRY>QENc*e&d
zSDHMkA*D}>uf!<*^B@wSh{4gG$_){w<$pQR|-hgLw&6qP`8Ot%3y;b<*UB2J;84$BC@z(
z0JW2)PBTCCKjX|mU582DgEFE<$JPnr*zT}0k1YqgH^4CNNRbg-kp)`adn6aOvc~Tn
zZ**XdG-;klXk22VA)~sxk
zl~ViCm}zxxbQj#Q`nC&yi@#^Z4_kTje7HHX#Z9r)ohqOEbpwy|I29~GU6A64V_oa-
zLeTsWwy=D=%p;5cn~o;lcCmBai2-3vZ%ow2_$y+$xZE9a9NyBP=T&sy)Ht&2m;fC*D$x5eeA
zk|-3we#iLoM>`ak;r{MPxn_C^#s}X4GPjq<$1sEism9i!lz}3?-rmuB8BWatzqo_u
zwojq@6^6W+?#sB(9A-t6S&x7YT$vmtWaS;So$z-~JKO2G?-jkjqh>t+a_WEt+UFN2
zX@i+V!X=T>N6gbBpMIqWgnj>PP)q5?JS)9!FEc|KN!IE{ij84)nbj-Fp?IQ>I3o*tsg#=d
zduJ2{dC>k_+kw1CyPEmT_g$u?`dcCuf3qeu{4TTVg=R*}j9DycOo`bl2sfcvQuTPx
z?po`60aA%Z<-w~g69NG@P}incHlH&rU9IM^nT~4%9$7g^@?rS!(MqgRJAhv=01gvcsK9^v8!{G&A@>6m%IkksPO8n*BL%HvD+
z#1N7N*nuKngpyM}cTkz$mIui*s@j$rcOKW;h8LAWl|eNQQ+A}^V=lrg45+OX9s2t8
zAYKBQRcHvp{l_zqn{q94ZJm+Q9>$`T9V9WCTy`4=i*k~7emc>orp&GxoJ`xJ@4OpD
z*Rn@(dYy_9^u3@7bxh7W)JC(!q&=JLC9+=wxj+;eROQ*+{T{CIb;eL{Yt^8Zu`zc<
z6ptq)CN(2r-zo;gjze{^RT84YICcamlGLO+%Gl7MtQj`-vwL7&?an*?+sn~_
zt`vD-=Lpc(ZfZb7+HU?4^Om-*0Q>zK1gOU&R;H*WI9<0)Hmhh?85x07-0Ho$td7vV
z(N&g`doL6KXLkkXfHP59hvX-7jiW1H`QI3|tb3JWmwKYdXIJ_(}J1UBkge6&iZ6@DsuDW^%3T)knHF{CVE
z%`NIrU76*s&S;^Ux)-wRNNKGyW0@S~o%L&f=^6HwcK7Zq?`uX^n3EUiTSg#O631ZK
zhePX`V<*B=tqBB-E2jueWZP5*2ZYJqU~6
zBthp-#yiU7$bn-vlO{XhsQf+=_^5EWB&PL>(qQ{5(}N~^_l1F9M0crNEp74zU!CK*
z5+0OcMd~LgQO6}Z{I{s$OauK+_pEI+*`E%*Qhn)cU&#&3uVg2pro5A_Js>f_SFWf|
zcNd_qX(H_|;#0s#1?X5;oeHPuVm^XdAWkDlU6o`E4+fXA(tI=sV*EvvJr^BUTjg;L
zRc>*Ov4>gW1(e#kqZJaVa=D$r3@~-;gkt_7CDSb-BI5{CVU1xd=d>b)(K?zRSwgi;
z`Ov)Xqi6P9&?ZzD^ZS5DaAU6Ejbx1W#ue3tB)PPgx}pxCWbnu{7TB
zT5)79g_Sw+<3?74^>ArZ=-u%^Ox&LRnZA_Wv>%$&R=L83HBq0j6kvSW#Y`0dvfYAc
zwucJsR2@!xnRV+ksY}=3*80R548sDS$t9ZDG;8|8%B_QsRz7bpV@d6C#Pe>TJ17NV
zPS3X<+Dsc$rV!d}7La2q#0e-;nkB=jzDzIWm*iXVnd2wUjl266^DEuOIvAzaYfAwS
zMT;_^d3Wa)Pky!*tkS+&(k!z>7*v2O5{HaDz>TOYWc__NV^L^s&?A|2sO6nge%=ZY
z0|*A1n5qp&3XBKw*I0a1{O6+qroT(KmtZX$cGrM3Cg$8Q|BoVSrxnyM{uJ1TS$$|R;P07KaK|`q;h~KgahRhdM`*O!*o`&YmZ&TQ
zqx;X%9TI=&7eKZ$4H7tc@D6&*;=-7Vy_b6lfPYR&;r=jkYmHTbNnt8oB5s9!;m~48
z$T{?_x9Q>K5M&bdQD-N^4`e&2_iG-nl?uBCnu2-7t7;W(f&r*Faq}WFqxK}fGayft
z)2xxKu59kD-q$3x{4Id}%C@T?h4XV#XZE-RCr=F1}H^Y)jtRPPxHA0Uo&r+>O
z0g7T-m&;kfeyy1b(v1=qefXt98L}400}2#KTYOa9QP!$zVVa@l5Y3dB@kZoAmfX;R
zV>upE4WL$a_v6;N{@Q_c2W1j3eW!$A88^N)*fdVT@zQkh3
zD*h+>;mydfvTvZwH$P2qyUz32NAK$g^se~NX6Bn};&&J>)-!r#zd!ES@T-VVcuNTs
z#3gC0WlM5X0whJV-AePkU&L%;{d8M7f7)W0Ay~S2(YrCc*DcM5v;mz_CebG?Xs89k
zw05F#M-qY;kE59naU7lOpeuO=QLnK{-i<-p@Ay#T@|5$}Fj$R~H?NH10z49&!d6^B
z7n)z_l=cXO)^NZr8Dw;KfXn!?50wcGz&ra9b@*Wu5y+`MMSa;Q)WzaIzhKO+lgsA<
ztmylLs$4O^cLMW=H_M;8?{_5F@j7rXnqGDvw!>?tPW}heo1^k*f(ZXkR-y
z&s+%>H#vA}82FR_f(62_G4ts@x96YP>D3#@P#f~cVJ~wNclR8P|^=TnxtH0
z!SXNPWDbP}(x}4cl|*h>{AkXKosER(+hLI#U!h1gw-EpNa#Cs03vcWxb6)|ux6snx
z?6YA;_4JOl@3*v+FocRkjV?s`#Gq{Lt)Am#mh`=sS>v82BBS)aD=Pp
z56y9Gct{k#+V=4#Ai|?q1q~N!V(!DfRu2XB3#SdAvc@ILjAo9ZvL44{LX`_S{@}91
zfLN7!wAQV06aYK5yr|AwF1hQ8*Ewn1{%4(E%WPGXFcIMpF`Z8vXejimaC6#84x0ML*)wNq|d{d@v1!m
zby#$pb&l6P)aA0emeBo4ba?37pl?(#?p1N&$x@}a$)IVs@2S(xN+5tI-GG8^&y&&n
z&A+pD{IhPB&D{;zMrD{lhNURjPETasrX4R1uGuLkEib=3f#TY9&6!
ze2&2$z}3R(a8k&G6q^`8kSig0ykqA9hf^5A)l7B5PH;+|14qC6xgA6)^odb+
z!cfr{LF%gp?8;5^x?{MkYt0&vvASrI^3q}VHY7l`GoV_y#EF83~NB0Ubl)E6~1Q=JFOq0Z6T44Kw#3WLy5tGrJ*^95D?mxR(m
zE0S>-2bJ0m-;E(Wn5@XSWW!OlRRWDCRcLhp1%O$TK<9~AWI4mt>f^K$i8Mmm>e&-{
zE=KIM7Jz!v>+P#6pfhH~uEF9u)Qb`C_Z6W#$yrOb
z??i}Sau93jat+Q&t}qG42(E7Aes*_2m#Z7i#}&C(4Pd4G(7vGts2nLsO-cK05Z@pC
zEfQs7vPJeA(b|qp_uq{$D8QCtCHB!Y=~=D46fj)#H5Z^gh*DREuh2?`K+vw+R>}C$
zR%n>vs4tlj)fF;u+q2R6IKG(`&tV5&(~*NG%!iXnPdh6ACF@j{+M~gq0^vTifT`DzkCqV)_^*;_t
z?%X=Gw?Q~DzH^#b`oxYO=scL@~qpi;O&x;(<7Sj
z_1rYs5pajTzTPm~H$)6JQxH5^NRQWJA;k&&xH03VVec6yQgAMZly
zFbO9!{1N&0s`b>i!5KWMewhlKV}y|>tMMcbvWb(=HnL1Z(po8oTFR#YKc9{)O=9NY
zD1awJo$R7)(V-0=pp!o&o`%NU4wGJx=ltqD?$!2{&Du^P69~sB)Jk=M&=N|3Oi*c!
zY`Ot%&<(AGrt5X*p|&NiGTw$O-uG-Z&BD*c7!vO1?-c_7C1-ePl&M^NZ
z@sV%Dh(*wq1~%oo%N|$$&$;`_rnx_Pu0Q&7GkswF1nI~y>t#ElK(6*9#$uK>sej#e
z<`2ZEq^EAM&sdme`&eIKG2d+o2>ulmh#=la54V{Ho+GpZO9
zaAzHB%$GQuL;t#}c3v)y8h(F-P?ezCBiW#90Ou^qX_yY*u8HiYdx47YA~HkP9NOB+JY2
ztxPT;X?H>ES(<}W0z3Xp=1|T(b;$`f9{fb?bpVf`q8S?;`D3jgk9cQ?-~G#k_>ad0
zpaR9ya?fYn05QYxp_78F^0)M)k+9wMYdzg+x=fJe_~J2pEz75!`W!*iTY7&~^ODkB
zSr`xUC;-j2#MtCVK5d3`(%M@u^2iRkvJ$Z!3eq3D99duVFa!VKM4
zTtt=2VgVw8tiWbn9u{zx=3$P<6mxLF8zWLpDsy|F&xIs$s=&&=(%sD1gsB3mPwW@?
z0W<{G-)JN;CjPK6df$c(Sno(3zZ8g9i}vLm4ud~Gpvqr&eim_#c+S8wt-QW8+a#F>
zE&OC*u%p6Gsj=$Q=*uT3E;`ZCQGL?LNPHJ+G}k5M@?k8^>XZH_=rT4(CdTLIGhNLQ
z`~-J{`z=&^-b5=(vC}&jk5p8o?SLAj%@@4)#HJNNLQk=Lch<&^g@FC%PDAa6JP|J^
zSZMpiOprq3QzV+Nx(K88S5XNIS?oK40@+?U*t
zzI?Bk#)1L50E!au_7e16j8_urA2D4l`QOGA#^hP-YMSlKH6RJY3o91sPXDkB;vm(v
zTG~b~JW^K5r4U7qd{iTKBS-~fn5kcl_zZpbdHA>h$RPM
zhAGVabHg-B!$YQbocLrTH1fzsPpgbh&J#}cVkrmM>PiCf&0`32@81ZEV{z705cex9
zo8y#4k#|Rh%$^?I(qt~3#xpY
z`ga*dx}*Qe=m0eTrFx!M*~5bE1b!2cDV5MEvukT}Kukems{D+PZZ1$lqBL{qoQg{v
zSdoWv+CjVvCTUjtN)`q(b@W1h)6EKzTep)p+Jsz1?v;PPNn0a!Cz|jd$e}8GPfQ`v
z!deRYNY{)rR_U@y_cuXj8w>?YZv>h~hx1p*m@XbVW3&v=+4kM0@{^DGESiWsG}?#a
zj+!6QJoxL2G70jbu(DNe=(;V8*r5iVSEm`Vmo|>yhpEL?_})!wX;4do?(->kenzh|
zEglV5Vg9fgOSn#X@Dj#m-iOJ!))PzWU?X5(N-s2-T$*wl=2m=>ViWiw(fzYb^jy&#
zRP*+blhO{`KD~w!(Bk^jyy3ziqZr8wZCWN($i?z_)3&hV6E6HC76k;S?AKK2)?
zC^`K=9B-KOdI~i-a`&uJi<`uWx_G~Xi5}{8{9ybvoWz=fgq9no*8Ffqb9`)SL}u*I
zVHBft;EZjVy$=KocSUB+SSuoK9eH;G6ZHbV+v{DLD>ksJ+oDEv%^GTl^%!?m&7#%$v&m{2N~mV3zVocl-e
zV$E)08eyW|u{O@|LNL4Pedz3z;q|e8$opdQJ>bM850y4<3a4$@UU;i@Z^2okY9_X9
zInWaI#=Ds1KXsqr*t{U&L&)}d(Ganur`4Et)Gk^}a@5fe?SEHtRIR|K@S`?(3dR;G
zQ85L%VQXlZGd3PeRfD^rql`8>*#k8tMD?7JIFlR5&;G=RQvE5bB`R~AQ&zey&)M8N
zEmm^+TeHNfcGz}HDa}l81`7#$k8*O&WVdxLJXe|@VX(6D^?z@B?u;uJ(olj{z7>su
zC#}J{XiIxi)Ox>Qq_!s&`LXCxOJJT0UX{!{smJz^cpN~UvmoD*uOL9MJ&X>=S@LO4
zF}!``sYN>GQOKYinj)}6efP7(#vq?rzR$0z(tvmmivrvTCX*)a50Puil%3zZx9
zC}pf?tOP5ly5v^a`zReScF^$gfDS>Vh|snQuCA4q$_But2oqTIdM9uYK(A=}%kIqA
zWU6Ym^qE!W#saA+-t2HcC>Z%ILxNZ?of8*M(756UfpyxbWXKf_xmr`}@Q!ues=l3i
zd`2dIZf*su00o8FDgyHR3i_#~yam8aa+NGS-_g|%*;QsEbH^vRD!%
z8azp}Uq^dJIqoBJP!RN8;(y^m{qks;&CwDzBpzX~DvzYDP~1Oh76FOElR5{Rrb!3w-4fvF@7eof?Fh#GzcMlmaC^$4%N3nv%yb*Qre+m
zOpR57XcKI+1X9nd=poXR_~gI}VA7pWp=PGAuhu0X$y59FM|{~NUQYzm=*GF?!fnp2
z)((Y}BQ#t}Mtf(E2%7>oXDMDMFHpLfX22S99VnI|a5XwQ_aN}Je)*kZPo64HYEmrG
z8u3Yp&HG1$G*gi|{SXY|Nvp>tj>h5*JexR(ezb^gl$FISb|d>ZNkR&xFi)}Nm;;71
z;Gmf1O%R{V;{Rc4Qb*#b->^1(NgTwg(}FhHFlHL?*S!l;XZK~<=x9CK?kCV58c@H|y(ETCdqd9|^8
z1u7`r7(XTk`dPjJ2G)Ug6;-F1{b+vym)!KCR6yX(G5J%!ouIwIFqzVV*S9h2!0a>0;YjB?@cm!8IXljZR!dmD2>tN<@_GK`1>0Z_Q;vNx4u}=)CBN
ziwPa99Dh<=X;EOYJ!Hf|TV!XGVFSYz&fzIB(J%*&ihBz*7J32D!+iPn$st7oSYakZ
zEO5d;MuUf7sgad}f&i*^2jjWVvLHSH4BIzb|b0A3fI07mknVqp&{Ax0Z&&JY&E#eg&ErHdwv
zw>B(=v+Uy9Vco6p)c{gO280b~lyn=KI5k0`%M>1JO>uuuzhyVoy9Q-G+`ptjp>h
zo44w;?o6>{>g87d0KaU9htDJdlXSI=ql_e5u-#E`y}U{Y@nzMmFov+-!qy=PBi*~_
znq!TaZ~u6VKmj$~mY3aP`UuT~_JEfWCZba;;EVv;-BYi=%G9O{U6u;pA;~@GLO3UP
zgo>XDyFd=*Z;)kvCP&hf36EFSE^e)O8Pk!OUzl*Lx8q^o`_ufSMG;rAfHJP{7*H%}
zv_t~gAOM_70j?r9>BaQPPp8Hn)2x$82DKGSe@6Lwj8t7@<5__U66x>?N}IpQWTHIQ
z`cF&b>xtF0J2*MjML45y^-WQ)!31em$JWst0kS>&*smKjE9{jdr;I2ZP!3k_;LFtQGLQx}6bWvynfH6MW#_8+lh
z1rrb}PhtBCCvbcS#Km0|4$Yh3iZOdzlg;714m5YeQC9p*wlGXjd?*z1T?4UJ!Tc19
zb{W(8&?&X?6kPhof$EA8-NI!~H*hlY7%eipd53rjJ$;7px-5AOmzNcVOgbDEL)+p7
z!x(0*t|Ee>4@N+SR&BxX_G++9QVv8B5e`-s7AOD|Ee5sgBE%-1r7Vo2Qp&(4H$J<-
zFF&E>-P4#&+jM{|0FS{4a!jD*ZjP128{+qHvoJ1ZL*y3};TacT)BZ)TsSelUdF4N<
z?F)(+%(bq8ajUARy9&)QFbQ#C;ax=@tIEMf*9}6^VQNakjPbcsA
z=%~tnDTyuWJk-;v`4J$Ru*|kBI@zoTWG%eVf4#j|l-~n1P$QsSL;$8A!9S%=!`9H}
za0x5~2cgdTg9$r5AsStY7$y80DT-dWEgaF-%_mp6C$eCazB$%4D^`17Dy5hVv=d=aDRFjsnBzTD*sju)@q~_|wDb@)WxsaENW1K4>-w
zJ}KoiwT13~^-$|Xq{0U~qoGvhC-Y{5Gs*zp(}ZX)NGBG}>dU%*(S|M-3P3F!9fyG_
z*z)9WG#e4i>9Or1{=|WSC4|qyXZMp;cCIT->1WBV=0DG|7PHTAb5jAeYH?bytEr-Z
zat#7~;Xw#LH7GvL0|p3AFqX_Bz)pPwq@BjGX5jtGfWRO!V)=PRZG0Ye#}
zUKE|PqCwaV2hYnccj*E^itgl5@Y1EWxGr)oL-iWhAclQFic#`DA@qeyc8R$dS$>c^
zq-x=D-j|HioIsBZMqFV!EclL?*<`5~ZDE=6F$zhx{5s;*c0@EaMBpN(ie;p1h#IIW
z*SnSo0kVxC0?Sy)RPh!83B?BT(N}aC2#XC-sQx2MLPSY7Ye0&5jZU(gfiHMVmse9eny}OWE|_ss`HBl+m3WYr
zgNf-bi)Zw8+Y&8s0d?7ao717BRtpn#y2BS7B-DdJbG8m5!toU}12^UvAP~Y4C@oBt
z_VKw-4cI_nE)RK}Zan<9HK)en$NeugoFm$U4`-4B1ya|*xMd>6J87B|5d@+7`LESV
z^sk_GpIYwFB3}gn1!EwRuFBoF7*7HSD^h`BvFw6TxX@rO66y?DWUtl(oK6U_#(fv*
z<}ZntO77Prb--aU{TE1kK@!}ulUcyF3u@6{cheLxLa%MsfsF8e2Ucj~OJ=?n%ThT(
z@WneCLW~cHAwy>~_U)jeR6`SBqX0xMC!8b+k>%m9xbQ-PK1Di5@(V(B9{FUdkdgBU
zR6ww0h*M~bKq8C**wwK8QvL2L->5Q=BO4((Ig*SGqL51*^7&6hJfEaeFh|&$$$*bB
zn#J28P-jL65un5eHG|Ml>GTChl-6hrPS*=AY)dfdkb=S{L6I%;2p`RFN-ZbymsW~n
zpg4pZ2zwbmgz_{S7Cuu738@d`qHYkW62j9$^l>6AViD%Sw*T$O!qb~@GRw5v!z(^4~
zDO+V>5DQY3ZE(c(d_TTcfGVZwOHI{fbS(ou7UOymr_hcK>~3$hqA
zsJlPVTAVE+lzT?|$^tW>T*fQPg6DXPJ_C$^%{3HSHRT&@4V?lyizRW*bS}qLA!zwo
zb=>kits?_nscSE9;;`<=Gv(>uRE26gV7|L+69YEbcUnxP9`XU`-c#Q
zy}>AzqxiGcwAC61DO)7YRgxJsy~C$M5PO73!il3ZkPaxY`$^n+V>;qxg>{vTc~lj}
zU{rCL6!&94Vc5zkvf`4z`A;M>VE7HA;zWo(*7=*K?t9_lm|lR9N04|fIxsq+T{IN|
zf&MLru8%{Ch%C|87E1`O_n>XtipEGZ8H(~24)8*gmD_3O{wf>7DdLqm)$(Lu_2~vF
zYHvBColR*ebHraLdAz-*bZS@l$#lkLMWEg1pJ2K^weak6X2;+rlDkIEvsOj*`
ztPGBiwg^tv2(%6iTp`=;pQX{iqKu+^0i`
zl{
za_YycuGTRZAz?+i3obzpw2O3ATAI#)eLfBH^$W5pzhYC4gkA_qnI;~^fe{ife|57;
zYzKn7nz()A$(=HV!Xhm}u;7q63P8d9qeaEywQSv#Ie1Iq
zk|Or<2`8;U#0x|vYZ+n48YbdRYb=@$L_?POJFFrpC^{ebT+YK#5}>zva-F6vbTCqU
z3u5p#4k)$M%qb==Q~*NK7{G4sFkE2{-P>?jbh0ENcQ>RV>O_K&OCCTI0<2_VPK}Jh
zS`r74775h?Bg9V<6^X(Fb|k@|qhJ`MB1S3{E?XfrnVW%}C++Xf;mh)&(B<51J|G(u
zM3B(E6j+@*|2BxxERh(i?3_glJ~R2tc%*He2*r8&2SM3*Yd{K<5+Nv8wbbXrD{}PG^a|s5;iDU(;+#tQ&&&Ej+7j_~{
zpab$i28w|oY=yd!{K{?RM&)sESTUv+MBNS=5(QB65LN3-!Q&NuqCj?2TQC&tv(j80
z+%kYd$ovu(s4$5p?vnva4StrRQ3l7sML2`t7Z@=DaiEC~1wxw-*dI=EN6q#@NmD3Z
zaThw^U20ho?SLzwCpT}1ZxDde%oZnTS!4@3>ca}0U2zNKqh&LLT0lrx)-Q)XUY9xlM%4alfrTq9*-7VEvfT+
zQQ^WwH&Flh7R7IPcMK~3Ubc|3Tz>O*1}#iAwQEcF+K>I2|Srnufix`i;$h=
z278e4xamMjL`qFLB}M{Myqi|ZnvYBrn0Y2=wY&)pihxe*hL!=s%LQgQ2ne>KQ0oVd
z0Gg-ZqjMzU`cs9F>LW5w{Km2!6gmbV4oaO0n{4JVI8*0bjd=nBem_f3jvRXclU>k7
z4pY({B@+*jmu)SP_Nn6}ofJ|Zf7~KrEaFklgcT&DEHsMpGfQ15d?D;w7iqYngT85I
z{5eEq)X*%?!?T62FLphO%ZNZa&Rc1mR6GBQdxT3{6Jv9Mv-VQ>)XzjX~S2@JT8;#0jz2yDszST58KF5u+FhS97`
z7ma&gJyXC$29ei}lQaHkVsW~D@Z6^4Vvg`dbFdR{w
zaUR@M$C7w0T!+f4@{H$!pvZ`nMf%Niyxs?P5^iEW0BBYA8)gTIaPlZ8WsuE`N$*KH
zFoeFF^6m|yHszEC>acYgZULelP%qn}K)kolyJ^4~Ll@E#?$td66J(mpdx0XwBP|tE>8I`D1{ArPL$il`H7v6fQn>uulX0AP!Ih9Y=*tAE*k1{
zCGhzv*%pKExmPAvle^ggwl)apq5&F~?U^308=hL);s3-74Is|y3I>6+E*nxHJ}cB4
zSJLpI&ue-h`mt$yoo!kg0A-v@c0(D9+!gu|2t|zFZF}PcVZKZNd>Av%uO~Y;h__)l
zAc+a|{ys!i~p#5)`C_;Vp({i>(aS
zbV@0)UfEv)R)DR&V00)%mOS#dRb@d}TY``Y9fI2;Qnd{!@yIO|w3Qg`EauL};)SEp
zEg4qjVK04QbJ#Qk*c2?0x30v;W65clhOu7rsbm94Yi_+1VDK~(1vFgieL(b=tPE`5
zxaMOeAY$m6F}!%L8-Wp`8A;UcfRiB)qAs;dwdQDQZ`7hXF4ATCi7|j06lyY8ti}4~
zso(Js72tm6=3K_*d@`t}
za{`FT;rZ}Fzw&ardlq&lkfQiACE}Rb%CUneo)Ew$i^n_wfC)XxR+R0NVBIPD0HV^8
zpqg-xgM`EyWA8x*qdu$_j1|Rz>>OEAlp8*aE#?c*2?$LOQ35htvM%x6v~Cj?Ia`=S
z827upiUD#9Fe*-fZ4D)SSf1WzH_{$`v>Sz_*vsdNqw
z^Qen9qhv&mU-s?p!nJCMCpQEOFM`0r#6Nr%2Ttav$@VMCZOE3Vu4}P37J+-mBL-+c;G8|42x>NL3`Y@M9hV9hD$y=X2~N!7u=N-Qe9&ejSO3kJl$t;mp~Kt
zGHBgyP?1-qOmR5XBSxZuW^@Wd2oz`OK91B-R8
zkxcBe1{s@}035)UU^v{N8bfuT#Vjoa$r1`1KG*la9GkXRy3?vzBPqrbXz42CXWTs<##xGy6XdzUMzlenhIWCP=ZfU3x3kI4Ir
zVriKO%Lj!jB&uC7qypuBDRfkVW=5Ht+?|1swi$Ify+~#R?Mg`mWy=0E
z24+m-47sWxo1uC>57?Z4eOLfpw}LVfbUXkk6+4J&!57o%fd{;-WP+y-ON^yV!T~vw
z9t$w<=uQJX3bqI))jnifF;J#uSt7$S%SeYjH6$eRndvsNp)$f^)9BtUWw4=;Nwaw9
zdrp35%RvCaZj`)3Pr##Xw%TbU3<(yWm=T1esa=isE^)k+Ig(f#K3m}4azEnWgp{o?
zpDhicM>^D&GSR?-a6~+G-0Co3E;yn3o6d~@AYYGtc
z@KG9NspyGX%WZHKHxbuAFWdlNyGEtbXV=b)0
z#r(@F&Pu1uD;fED#{$tI+D;&4(Sl*6_+HzU>F$b#-0Iqu&DS<$J()e7Owy#okQNpI
z&|qKGk*iYm1`f_h1fik5I#5wE*F;(_2oKL{8ibgR5FZ~b9|_QbVu}$I^7b$nwm=5I
zWB9YTcrT=gIzu(qh6onU3y8JZM{ZV*p~CX|01XY53=
zb1yVdB)3+?FGTqem7QQbK(NG@#E_0a=NOb9Igx`{~Xe8N_BW(-RdZsOwG?8SWVW)5ioDaBGGhj8}
zGeWvScYqEnt;*a1Drzn8vM;n&<%ufrg`W${UD$3UoiO+(f-0Ce?F@xzYiLNdm!UXT
zhPvp7VnqP{igU{^7nj}9HZdtainm+f0e~gMlavNlvy!yE$b@Uj_M}tur5I?)P@OGb
zZ7;QS6ep)#@Gnwx5RMGijzxdbLxah~p!`I+hAz7&t1bsH
zH!{kw>6yDdLa
z)WNxw)?mzm4T3ffui_Ng#Ttjh4--dqa@0q%9N}kG3d_ry9V%7YnD9g-EGBFeTE%kzu1PNKRh;5!J-Y*e>c@Bhbp|PdG{36+lFdLUHqbLIC4!qU
z>d^OgH^F7GwYpq9EDk{+E{-7w$tC^6`}0{1ur@y9#@u;QH|6c1M;djPaCj0UA+5l$
zgU~usjSW*kTOJ*T+fx#^c=H1B6v?I7U$AP{nR!U17|&-PNJuVN3(@X2YQz)ohwYxt
zAQHf9D82q=lIR!sWkw)pV5(Q9tr*)9f86Qv}Qfa#B^7m8ltY%M&s
zu-}`6Ms)(M^%yX~Zgs_AqzN0oM9kB1i1%n)dAxaUI)$oR616uqxKp>G#DfBx`N2sI
z2Vjw9dd*;f1GXrNg{D|%A^s=+SfGt&JNKQ66`zA9SIU#fOpshIrZ(2aV2HHiFo8fZ
zbm3n?I0kF+kMb`S3wWwRCYJMH+GK@3xv($h@7Zx86XHpO5-o_8i5!3|)u+fA3`BCd
z8feA!AR6Vc9j;j9XJEi8nCR>z+9%gG!^_cO{YKLqHCN|s?vor-tm5GG0$e4t(r8*u_CFKhweh}19V24;x??DQaM1UBL{Gk}jWGGn1;?NL
z6`ThLooCqdGU^{WT)piy!&v2|)XD*%ie3N&1F2aZ&h|pRP2gUXV+RB@AcZ53`JYN1
z4+Akpwo3CqJx&31AZ3EP&xRSD_-}v<^f*CPIE^*?@JYMKus|dL5E}i{Y5LDziHKR7
zU?5L~&>=((g__SXBc)SmzB0f<5jNlD+rDd#xlFq=z?|q^bvk3Mu%Lwd_&)7KTrxVq
zS{^NxNmdqAifA?x$8S<2e5p!|^_abY$KJ*Mj##+kiu^gu(GhJG`f~@0ErzZj^1;Oj
zY@U9sxu$?;--I}h_!MY^x6Xucab^nu==L;SLV}lz#Kl;EF^`H5CT0sH6&PO?*fBH^
zZVXXTku5%LdG1k&jFEEE3az+|x<6q$uZ*sLnxM_k>EXg6<_Lio+SCr3@;lKlrK
zf~)JKw3s92!`aA=O&WxF}CvMA~mU{UTF4*T3zr@%@j?FWVf{vQd|gR$TuCDf>o
zbf^y!jF`Mo9;3MoE>4|EBY>H#7gy9pzv5UG&L*aEL9FhzEfN&6z
zq-q|!5Udh=9PExVuqo}vXqnL8W<6-sLrxG3@{1G@ig6s!Yh>#d9TEhQ+QfjsNq`va
zZd^3Lg%*JrRE@7{N>$;IX#O!19?iA@MNFY;%NVcd84>(R>p`_qxVve;xAp#0-G2|@%nMr`(JAbof
zx4%(oZ3855zl9w%$|2WodQm%67&Zg~V{`b?U^1tJCxrbvl)I!lM1q_!woy{Pq$?W9
zgxe>O=Q1*j$Mx$F>}R_3U02QIB)5?be2xViCwQmFHSVBdp?}+7p`>p}i$Rz*WV~^9
z{>nxBAp8;yu*|$VyfKaN5zb?8YX~=IZ
z-4%9~acKW`ft&SYhX4wj*epuwKGEXgmCyeLfe`*>-TgkX?CcB{V7is-|C*s_z(8j_8&>s*>Qb`KsAxw)43(q7$nAWWztby(uG?d4&+W%#=SkTb`=$?F-
zM(E)Nm9l-?BP^7l-7+SQ3YbhH{=v|wNOtoK94Z_6Sw$pMxBoXo35l>%IS7*oOn*Nt
zG`LMKEQ&0S2O;>M**Xb)FYJW*7ibcpOHd)x;hFHk^R~`+8&ObOqA=^kSgfn+t}GjV
zrNkCOmhga0(&qbPo%*AjG}K?Jh*}6MlA6)IGvHBZ%TVC+2nz@Z7iA|0<@rQFaMvxS
z?pKy9fd%FO)(aTsOgl5g@IJS0SKlC=4z7Yxt$tDODjWAt8$rKH+?Cm?pe*K$Lh3Zu
zveYdTaf7i<@^3e4Zp>tIvPnsKJ4rgR0#$uO<;T;c=)a
zZc_ZYJs?8!h%u9sXyN7SH$qn9p|+Oxk@Qjq#FVf5pjNO&W_FYlCdK+Q0=W(R|DD2o
z*g{|CKG07|`zD_Fi&)S=#(?ksXRbDum><{&+?FfL2x
z_#@qjGlkrZjE4iYNO-UY@PfDQ3e!Wg1PqPOknyGa>jjM-yz>
zVmL35PlSOUl!)M@L7uI9zkJ_7*M%%hrZMID?OmX7FE80dJ<)tfnfPL0sV(hwV(_s3
z=k4cidnlv5X;^(fN0j3tL>1mX9Lwa=~z$%BrPPwKc*=#GBLzGSOo4MDI~yI?XQ&&4Clvqm6za%WjF|%;3-jB!X=O%
zwrBGAgVSj;eiRcOz#zD+K)4y4b&PeHkhkb6c{ijAal#KeP%v8_k6u$PLRLweXk>9G
zy9Zdf*3t~lDFtqS_6R`f*hj5(Tq154uBv_SXch>tMko?g4ho&ON|d;zc3RVB;~=Q)
z4q5R`JV4h5rQzmpz7CA;CDu75G~l-&EBdUlKaki9x&?Y$_kUa%W^?gKZPk;35c8fK=Qnc!rKL9LPQAX%>WxG$+U=6%Ja<
zVTdd{_ypl<~iodFM`+>#TVP`@tif|MHx^p
z+!0*zKu)b9dV-4gu|hwW1>a1VySJy@C37LiNoYXpWm5bx3|fm_y2FN@Di
zKYV~n|2qbx8ab*VgDQaG=qzGpE(4hG6Q8M|c#_e0stYJ%MMBeBw^^xcGM})U;!sZY
zXk~b2-y8WE_h*iw0>W6luRl*FH4X5O+}qz3J7VvS;F~%#0zhVPD|98u1zBG~c#!tS
zfR+XNj8UKPTcU>l#aUpXLih#Z*QB9QFzRkTidwp=ol=t^Zf=WpsyF(7XHa$
zLzP^u?Vykq8a8Z!$L+AYtzkSiQ>bVMEAL@8v!H0j%Eo~&t}PQ))f&%1U?f-?+7>x3
zt_)ZlC3{)4FZVC-J79rh2_K*fLt{vW)~FW{n=O#2Iduwd9b}~PaEpi29N{?T)B%`6
z46>^YsPR0JUshrLB6MLE!X}Qhk~edz6uIdEw>vMWK`5YS8;vLZEXFuW{Tg0;PRg=R
z0-sQP^QqXHpsWDZRdanUC3`W%1ZbreFqkBRK^|gW*n6KuE%nw-bIpwmZ9}zA^VNJa
zLSQp;4IV8){Vgw;wcm_+Siy$k4?o<)}A0ggcC?A
z{CK6Zoq33EaLtOFD$s>x3>weGiXcPI9Aqmzf$*h!xSUsP3Md+|4hbAQC&)2q5h@IX
z;TZUJSEft}RZXKTU}uR!M1tfrfWXW2(y2a%xJ^XbP!{96qL&{SsC0eC|nwtb%ZkUzs|6lynd>89PrB#BqDu?
z1}{Q#EAP$*1ZE3Ro&uCWpWFUTJ@Mw6nai2Sm*p<1D{KYP8Nm6Nggld;J3b*J1X1AN
z|4+g2_c9p|{2alWsKJt&j7S*r>7*=GZw87^NFs67N>Nd`g|dX9qtA|8MeX{cu4N&Hg;{7sA?B;1Ydbtg>~vkil*0i_OvUq%AGMQc-_
zK_X;{o09>V7W&9p%gqDoqsn(sbhRLlaqD4JGoUom!lSk$Og6Z`)#fD%M^Pm;h*FDP
zDrrO!y4bbQNU=MEz(_n@j(A*Mut6ZXjrX}@GpeRh0FMtm-CTruC{o+s7ZL~h4UJbF
zG;@5PyT+!>i_b2%Dii^~hI@Wb}!y=DL4de&-
z@JkAl)i4?n9T-c-$g1Z|dC7XU`c4-l4q&-bn*YO>j!(Pcm_B4UXy}c7(yl#Qa=>x1YIFE
zLl0RL*u)}i%yjjMSXLHfpT!3y=Ab5CxFdw5)(tKY0f~U#xIh6$EffKCajU&rIa^g(U^0VgJs?Z~$4vEX3Bu?&
zvdLsGRg^u|N7dj5UN%P_hJXUi(u^}T^$e|eN
z;6ud2oE!{&r|a*F3Ji2mpZaQ
z!GI@i3WT9SbZQ!1t6g%}zTB@|^WV{Mc56#QHXMBSZ#msxfnnU?CV~j47v2+DK`)n0
z(d|C=g3azCSLE5Rnt2&ySyqXcK*Tm1hZRKVdZrer@g(?Kp~+MknWB^xM4X~W6N7|)
z)6L}ftVbRPS##4mZ^wrtGp7Q*4iaKhVW+E5v&%to9>0<1k|MQ+U@!4b?`iW~4UEyd
zJ%aD5NHX0NLItNM`iNb@P*CQ~2&#uEPCHqsxPA|cGF8c(-6Hlh;Fq9i0hkIYxqocW
zoD{CvWK+&ewFv&iX^M~mO7f?#4AP(P0E6x!D1#UqIM#!xlWVs7*W=vRtwvp%kJJM8
zkI(Szj(A76L$qUO?t3&`o%Zc1fNe`520gp8qCU*_)21N@i5)l*Hz?|AqoC!zmEA1?
z1Ly=e@O+5BNyduzNRj$Pkukq<&x5Ojd-BII@JTZG?2xblooet`ga_QJHWVY^nxHTn
zD@`tqF8AgoI*YXbeiWorUts_T5la>>7Zqq*!V|1Qju&J=5Mvg*3R>gDk|07rg5o?Y
z&@Pj8)UR|CQmt%7;mT}?QMumNj}@Cd2!BQ{TWx~g^N*_NILR9gzF-g&jNtk?gOO%K
z1)|AAi!7IZ=&VUGRcH8Fv5MS3GtS~KKZeW`|FUT
z`_%9Rc>OTc6e0lZ8Zfx1S8t3+c>4wCQkJp}Z`ws_2nd1_0)#sn1{4RH2v6}+Uj-?{
zc9{eU&6v|ku$U~wjc`l^(zk5AvY2Ge0ZpIm6-DJ3s)Y;w--!IN!G*aQe@~-Ho0>A%
zYS=1Eibv&~U+|#a>wM~o=^V(^msntciqw_Rh%r7i6y&Rb1=LMr^!ZLRl_wajU@jhA
z5*FcDg9W~c&`batC|Lkn0#E|47y=SFjF+1dE(L0}+GcZ(6$}DFS4SLTu%ZaF8}Jc>
zoO5I*!^JH9^I0-H+hTc?k>t4RTS=ln8GwR0v7rp`P+g@PggksQY6^*kR=cpsrb()-
z$ZzOnw?huSN9k-7nI2l6#S`j?+Hs6WKz!GQKIQ|z$qM!)9*!&(FUJGIaI5Z2-9Yo_6
zF+YZxBnkvTTJ4Q#$a%h4-9q#^iR5sP1(3F8@R|6Nx)I<8#&ias%NvQ5
zB?@AKZV3qrNh%RSfH))h3yZ6<9`~YwX>cpC02pqCzU4g%p#W8QCCaB!%0DyT{kunD
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⋙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
z
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
\ No newline at end of file
diff --git a/docs/fonts/fontawesome-webfont.ttf b/docs/fonts/fontawesome-webfont.ttf
new file mode 100755
index 0000000000000000000000000000000000000000..f221e50a2ef60738ba30932d834530cdfe55cb3e
GIT binary patch
literal 152796
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

=v_rA!CPE#mM^4@)}X7qf;At+v)G*FZd&; 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 ALjV8( literal 0 HcmV?d00001 diff --git a/docs/fonts/fontawesome-webfont.woff b/docs/fonts/fontawesome-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..6e7483cf61b490c08ed644d6ef802c69472eb247 GIT binary patch literal 90412 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%0Ded40&XED0GYFoIh+AV*?9!MR5pBW?X_8Bp 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 IH>08b4`|GD*#H0l literal 0 HcmV?d00001 diff --git a/docs/fonts/fontawesome-webfont.woff2 b/docs/fonts/fontawesome-webfont.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..7eb74fd127ee5eddf3b95fee6a20dc1684b0963b GIT binary patch literal 71896 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≠dR0E9ICQ{-tcR;@{R^I5P#1GUH!p=-{c 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 literal 0 HcmV?d00001 diff --git a/docs/fonts/glyphicons-halflings-regular.eot b/docs/fonts/glyphicons-halflings-regular.eot new file mode 100755 index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64 GIT binary patch literal 20127 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/glyphicons-halflings-regular.ttf b/docs/fonts/glyphicons-halflings-regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b GIT binary patch literal 45404 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 G`u_lkUM?>H literal 0 HcmV?d00001 diff --git a/docs/fonts/glyphicons-halflings-regular.woff2 b/docs/fonts/glyphicons-halflings-regular.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0 GIT binary patch literal 18028 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 literal 0 HcmV?d00001 diff --git a/docs/images/favicon.png b/docs/images/favicon.png new file mode 100755 index 0000000000000000000000000000000000000000..5fa6e8ed06175b302eed1cb6b85e8ee20d8c2066 GIT binary patch literal 3508 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 iBbl$&A`^vDivI@;HBUCO0}L+!0000 + + + + Redirecting... + + +

If you are not redirected automatically, click here.

+ + \ No newline at end of file diff --git a/docs/js/Chart.min.js b/docs/js/Chart.min.js new file mode 100755 index 0000000..a87f614 --- /dev/null +++ b/docs/js/Chart.min.js @@ -0,0 +1,7 @@ +/*! + * Chart.js v2.9.4 + * https://www.chartjs.org + * (c) 2020 Chart.js Contributors + * Released under the MIT License + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;rn?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i=0;a--)e.call(n,t[a],a);else for(a=0;a=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-C.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*C.easeInBounce(2*t):.5*C.easeOutBounce(2*t-1)+.5}},P={effects:C};S.easingEffects=C;var A=Math.PI,D=A/180,T=2*A,I=A/2,F=A/4,O=2*A/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),se.left-1e-6&&t.xe.top-1e-6&&t.y0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r=n?(H.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},Q=H.options.resolve,tt=["push","pop","shift","splice","unshift"];function et(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(tt.forEach((function(e){delete t[e]})),delete t._chartjs)}}var nt=function(t,e){this.initialize(t,e)};H.extend(nt.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&et(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;tn&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;na?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function ot(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+at,rt(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=at,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+at,n.startAngle,!0),a=0;as;)a-=at;for(;a=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/at)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+at,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;tt.x&&(e=bt(e,"left","right")):t.basen?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function yt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&vt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}N._set("global",{elements:{rectangle:{backgroundColor:pt,borderColor:pt,borderSkipped:"bottom",borderWidth:0}}});var _t=K.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=vt(t),n=e.right-e.left,i=e.bottom-e.top,a=xt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return yt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return mt(n)?yt(n,t,null):yt(n,null,e)},inXRange:function(t){return yt(this._view,t,null)},inYRange:function(t){return yt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return mt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return mt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),kt={},wt=st,Mt=dt,St=gt,Ct=_t;kt.Arc=wt,kt.Line=Mt,kt.Point=St,kt.Rectangle=Ct;var Pt=H._deprecated,At=H.valueOrDefault;function Dt(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=H.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return H.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}N._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),N._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Tt=it.extend({dataElementType:kt.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;it.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Pt("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Pt("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Pt("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Pt("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Pt("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t=Rt?-zt:b<-Rt?zt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=zt,S=b<=Nt&&x>=Nt||x>=zt+Nt,C=b<=-Nt&&x>=-Nt||x>=Rt+Nt,P=b===-Rt||x>=Rt?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i0&&!isNaN(t)?zt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=H.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n0&&Ht(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ae(t,e,{intersect:!1})},point:function(t,e){return ee(t,Qt(e,t))},nearest:function(t,e,n){var i=Qt(e,t);n.axis=n.axis||"xy";var a=ie(n.axis);return ne(t,i,n.intersect,a)},x:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Qt(e,t),a=[],r=!1;return te(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},oe=H.extend;function se(t,e){return H.where(t,(function(t){return t.pos===e}))}function le(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function ue(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function de(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-ue(o,t,"left","right"),a=e.outerHeight-ue(o,t,"top","bottom"),i!==t.w||a!==t.h){t.w=i,t.h=a;var l=n.horizontal?[i,t.w]:[a,t.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function he(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function ce(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;idiv{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&ge.default||ge,ve="$chartjs",be="chartjs-size-monitor",xe="chartjs-render-monitor",ye="chartjs-render-animation",_e=["animationstart","webkitAnimationStart"],ke={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function we(t,e){var n=H.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var Me=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Se(t,e,n){t.addEventListener(e,n,Me)}function Ce(t,e,n){t.removeEventListener(e,n,Me)}function Pe(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Ae(t){var e=document.createElement("div");return e.className=t||"",e}function De(t,e,n){var i,a,r,o,s=t[ve]||(t[ve]={}),l=s.resizer=function(t){var e=Ae(be),n=Ae(be+"-expand"),i=Ae(be+"-shrink");n.appendChild(Ae()),i.appendChild(Ae()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Se(n,"scroll",a.bind(n,"expand")),Se(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Pe("resize",n)),i&&i.clientWidth0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index-1?t.split("\n"):t}function Ve(t){var e=N.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:ze(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:ze(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:ze(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:ze(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:ze(t.titleFontStyle,e.defaultFontStyle),titleFontSize:ze(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:ze(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:ze(t.footerFontStyle,e.defaultFontStyle),footerFontSize:ze(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function He(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function je(t){return Ee([],We(t))}var qe=K.extend({initialize:function(){this._model=Ve(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Ee(o,We(i)),o=Ee(o,We(a)),o=Ee(o,We(r))},getBeforeBody:function(){return je(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return H.each(t,(function(t){var r={before:[],lines:[],after:[]};Ee(r.before,We(i.beforeLabel.call(n,t,e))),Ee(r.lines,i.label.call(n,t,e)),Ee(r.after,We(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return je(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Ee(r,We(n)),r=Ee(r,We(i)),r=Ee(r,We(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=Ve(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Be[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;ei.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.yl.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=Ne(e.rtl,e.x,e.width);for(t.x=He(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=H.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,H.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),H.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!H.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),Ue=Be,Ye=qe;Ye.positioners=Ue;var Ge=H.valueOrDefault;function Xe(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?H.merge(e[t][a],[Re.getScaleDefaults(r),o]):H.merge(e[t][a],o)}else H._merger(t,e,n,i)}})}function Ke(){return H.merge(Object.create(null),[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||Object.create(null),r=n[t];"scales"===t?e[t]=Xe(a,r):"scale"===t?e[t]=H.merge(a,[Re.getScaleDefaults(r.type),r]):H._merger(t,e,n,i)}})}function Ze(t){var e=t.options;H.each(t.scales,(function(e){pe.removeBox(t,e)})),e=Ke(N.global,N[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function $e(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(H.findIndex(t,a)>=0);return i}function Je(t){return"top"===t||"bottom"===t}function Qe(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}N._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var tn=function(t,e){return this.construct(t,e),this};H.extend(tn.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||Object.create(null)).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Ke(N.global,N[t.type],t.options||{}),t}(e);var i=Oe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=H.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,tn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),H.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return H.canvas.clear(this),this},stop:function(){return J.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(H.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:H.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",H.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;H.each(e.xAxes,(function(t,n){t.id||(t.id=$e(e.xAxes,"x-axis-",n))})),H.each(e.yAxes,(function(t,n){t.id||(t.id=$e(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),H.each(i,(function(e){var i=e.options,r=i.id,o=Ge(i.type,e.dtype);Je(i.position)!==Je(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Re.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),H.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Re.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return re.modes.single(this,t)},getElementsAtEvent:function(t){return re.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return re.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=re.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return re.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=H.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=H.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(H.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},sn=H.isArray,ln=H.isNullOrUndef,un=H.valueOrDefault,dn=H.valueAtIndexOrDefault;function hn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=rl+1e-6)))return o}function cn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[],_=0,k=0;for(a=0;ae){for(n=0;n=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-fn(l.gridLines)-u.padding-gn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=H.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){H.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){H.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=fn(o)+gn(r)),u?s&&(e.height=fn(o)+gn(r)):e.height=t.maxHeight,a.display&&s){var d=mn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=H.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){H.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ln(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;nn-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;es)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;iu)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e1?(h-d)/(u-1):null,bn(t,i,H.isNullOrUndef(a)?0:d-a,d),bn(t,i,h,H.isNullOrUndef(a)?t.length:h+a),vn(t)}return bn(t,i),vn(t)},_tickSize:function(){var t=this.options.ticks,e=H.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;yn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return _n(e)||_n(n)||(t=o.chart.data.datasets[n].data[e]),_n(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=H.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),wn={position:"bottom"};kn._defaults=wn;var Mn=H.noop,Sn=H.isNullOrUndef;var Cn=yn.extend({getRightValue:function(t){return"string"==typeof t?+t:yn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=H.sign(t.min),i=H.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Mn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:H.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=H.niceNum((g-f)/u/l)*l;if(p<1e-14&&Sn(d)&&Sn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=H.niceNum(r*p/u/l)*l),s||Sn(c)?n=Math.pow(10,H._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Sn(d)&&H.almostWhole(d/p,p/1e3)&&(i=d),!Sn(h)&&H.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=H.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Sn(d)?i:d);for(var m=1;me.length-1?null:this.getPixelForValue(e[t])}}),In=Pn;Tn._defaults=In;var Fn=H.valueOrDefault,On=H.math.log10;var Ln={position:"left",ticks:{callback:on.formatters.logarithmic}};function Rn(t,e){return H.isFinite(t)&&t>=0?t:e}var zn=yn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t0){var e=H.min(t),n=H.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(On(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:Rn(e.min),max:Rn(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=Fn(t.min,Math.pow(10,Math.floor(On(e.min)))),o=Math.floor(On(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(On(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(On(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(ne.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(On(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;yn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=Fn(t.options.ticks.fontSize,N.global.defaultFontSize)/t._length),t._startValue=On(e),t._valueOffset=n,t._valueRange=(On(t.max)-On(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(On(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),Nn=Ln;zn._defaults=Nn;var Bn=H.valueOrDefault,En=H.valueAtIndexOrDefault,Wn=H.options.resolve,Vn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:on.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Hn(t){var e=t.ticks;return e.display&&t.display?Bn(e.fontSize,N.global.defaultFontSize)+2*e.backdropPaddingY:0}function jn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:ta?{start:e-n,end:e}:{start:e,end:e+n}}function qn(t){return 0===t||180===t?"center":t<180?"left":"right"}function Un(t,e,n,i){var a,r,o=n.y+i/2;if(H.isArray(e))for(a=0,r=e.length;a270||t<90)&&(n.y-=e.h)}function Gn(t){return H.isNumber(t)?t:0}var Xn=Cn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Hn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;H.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);H.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Hn(this.options))},convertTicksToLabels:function(){var t=this;Cn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=H.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=H.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;er.r&&(r.r=f.end,o.r=h),g.startr.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Gn(a),r=Gn(r),o=Gn(o),s=Gn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(H.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Bn(s.lineWidth,o.lineWidth),u=Bn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Hn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=H.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=En(i.fontColor,s,N.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=H.toDegrees(h);e.textAlign=qn(c),Yn(c,t._pointLabelSizes[s],u),Un(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&H.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=En(e.color,i-1),u=En(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=H.options._parseFont(n),s=Bn(n.fontColor,N.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",H.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:H.noop}),Kn=Vn;Xn._defaults=Kn;var Zn=H._deprecated,$n=H.options.resolve,Jn=H.valueOrDefault,Qn=Number.MIN_SAFE_INTEGER||-9007199254740991,ti=Number.MAX_SAFE_INTEGER||9007199254740991,ei={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ni=Object.keys(ei);function ii(t,e){return t-e}function ai(t){return H.valueOrDefault(t.time.min,t.ticks.min)}function ri(t){return H.valueOrDefault(t.time.max,t.ticks.max)}function oi(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function si(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),H.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),H.isFinite(o)||(o=n.parse(o))),o)}function li(t,e){if(H.isNullOrUndef(e))return null;var n=t.options.time,i=si(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function ui(t,e,n,i){var a,r,o,s=ni.length;for(a=ni.indexOf(t);a=0&&(e[r].major=!0);return e}(t,r,o,n):r}var hi=yn.extend({initialize:function(){this.mergeTicksOptions(),yn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new rn._date(e.adapters.date);return Zn("time scale",n.format,"time.format","time.parser"),Zn("time scale",n.min,"time.min","ticks.min"),Zn("time scale",n.max,"time.max","ticks.max"),H.mergeIf(n.displayFormats,i.formats()),yn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),yn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=ti,f=Qn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?ui(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ni.length-1;r>=ni.indexOf(n);r--)if(o=ni[r],ei[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ni[n?ni.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ni.indexOf(t)+1,n=ni.length;ee&&s=0&&t0?s:1}}),ci={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};hi._defaults=ci;var fi={category:kn,linear:Tn,logarithmic:zn,radialLinear:Xn,time:hi},gi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};rn._date.override("function"==typeof t?{_id:"moment",formats:function(){return gi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),N._set("global",{plugins:{filler:{propagate:!0}}});var pi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function vi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a0;--r)H.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function ki(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||N.global.defaultColor,o&&s&&r.length&&(H.canvas.clipArea(u,t.chartArea),ki(u,r,o,a,s,i._loop),H.canvas.unclipArea(u)))}},Mi=H.rtl.getRtlAdapter,Si=H.noop,Ci=H.valueOrDefault;function Pi(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}N._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;el.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;H.each(t.legendItems,(function(t,e){var i=Pi(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Si,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=N.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=Mi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Ci(n.fontColor,i.defaultFontColor),g=H.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Pi(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},H.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;H.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Ci(i.lineWidth,r.borderWidth);if(c.fillStyle=Ci(i.fillStyle,a),c.lineCap=Ci(i.lineCap,r.borderCapStyle),c.lineDashOffset=Ci(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Ci(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Ci(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Ci(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;H.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),H.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Di(t,e){var n=new Ai({ctx:t.ctx,options:e,chart:t});pe.configure(t,n,e),pe.addBox(t,n),t.legend=n}var Ti={id:"legend",_element:Ai,beforeInit:function(t){var e=t.options.legend;e&&Di(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(H.mergeIf(e,N.global.legend),n?(pe.configure(t,n,e),n.options=e):Di(t,e)):n&&(pe.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ii=H.noop;N._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Fi=K.extend({initialize:function(t){H.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ii,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ii,beforeSetDimensions:Ii,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ii,beforeBuildLabels:Ii,buildLabels:Ii,afterBuildLabels:Ii,beforeFit:Ii,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(H.isArray(n.text)?n.text.length:1)*H.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ii,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=H.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=H.valueOrDefault(n.fontColor,N.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(H.isArray(g))for(var p=0,m=0;m=0;i--){var a=t[i];if(e(a))return a}},H.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},H.almostEquals=function(t,e,n){return Math.abs(t-e)=t},H.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},H.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},H.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},H.toRadians=function(t){return t*(Math.PI/180)},H.toDegrees=function(t){return t*(180/Math.PI)},H._decimalPlaces=function(t){if(H.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},H.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},H.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},H.aliasPixel=function(t){return t%2==0?0:.5},H._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},H.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},H.EPSILON=Number.EPSILON||1e-14,H.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e0?d[e-1]:null,(a=e0?d[e-1]:null,a=e=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},H.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},H.niceNum=function(t,e){var n=Math.floor(H.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},H.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},H.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(H.getStyle(r,"padding-left")),u=parseFloat(H.getStyle(r,"padding-top")),d=parseFloat(H.getStyle(r,"padding-right")),h=parseFloat(H.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},H.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},H.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},H._calculatePadding=function(t,e,n){return(e=H.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},H._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},H.getMaximumWidth=function(t){var e=H._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-H._calculatePadding(e,"padding-left",n)-H._calculatePadding(e,"padding-right",n),a=H.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},H.getMaximumHeight=function(t){var e=H._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-H._calculatePadding(e,"padding-top",n)-H._calculatePadding(e,"padding-bottom",n),a=H.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},H.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},H.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},H.fontString=function(t,e,n){return e+" "+t+"px "+n},H.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;on.length){for(o=0;oi&&(i=r),i},H.numberOfLabelLines=function(t){var e=1;return H.each(t,(function(t){H.isArray(t)&&t.length>e&&(e=t.length)})),e},H.color=_?function(t){return t instanceof CanvasGradient&&(t=N.global.defaultColor),_(t)}:function(t){return console.error("Color.js not found!"),t},H.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:H.color(t).saturate(.5).darken(.1).rgbString()}}(),en._adapters=rn,en.Animation=$,en.animationService=J,en.controllers=Jt,en.DatasetController=it,en.defaults=N,en.Element=K,en.elements=kt,en.Interaction=re,en.layouts=pe,en.platform=Oe,en.plugins=Le,en.Scale=yn,en.scaleService=Re,en.Ticks=on,en.Tooltip=Ye,en.helpers.each(fi,(function(t,e){en.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Bi)&&en.plugins.register(Li[Bi]);en.platform.initialize();var Ei=en;return"undefined"!=typeof window&&(window.Chart=en),en.Chart=en,en.Legend=Li.legend._element,en.Title=Li.title._element,en.pluginService=en.plugins,en.PluginBase=en.Element.extend({}),en.canvasHelpers=en.helpers.canvas,en.layoutService=en.layouts,en.LinearScaleBase=Cn,en.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){en[t]=function(e,n){return new en(e,en.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Ei})); diff --git a/docs/js/bootstrap.min.js b/docs/js/bootstrap.min.js new file mode 100755 index 0000000..eb0a8b4 --- /dev/null +++ b/docs/js/bootstrap.min.js @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(idocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),n=o.length;n--;){var s=o[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,g.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",r="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+"."+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusin"==t.type?"focus":"hover"]=!0),e.tip().hasClass("in")||"in"==e.hoverState)e.hoverState="in";else{if(clearTimeout(e.timeout),e.hoverState="in",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){"in"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusout"==t.type?"focus":"hover"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState="out",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){"out"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,r=a.test(s);r&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s="bottom"==s&&l.bottom+d>c.bottom?"top":"top"==s&&l.top-dc.width?"left":"left"==s&&l.left-ha.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data("bs."+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass("in")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data("bs.tooltip"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.tooltip",e=new m(this,i)),"string"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){"use strict";var s=function(t,e){this.init("popover",t,e)};if(!n.fn.tooltip)throw new Error("Popover requires tooltip.js");s.VERSION="3.4.1",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===o&&(i=this.sanitizeHtml(i))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===o?"html":"append"](i)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(i);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data("bs.popover"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.popover",e=new s(this,i)),"string"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){"use strict";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data("bs.scrollspy"),i="object"==typeof o&&o;e||t.data("bs.scrollspy",e=new n(this,i)),"string"==typeof o&&e[o]()})}n.VERSION="3.4.1",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data("target")||t.attr("href"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(":visible")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(n[t+1]===undefined||e .active"),n=i&&r.support.transition&&(o.length&&o.hasClass("fade")||!!e.find("> .fade").length);function s(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),n?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}o.length&&n?o.one("bsTransitionEnd",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass("in")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),"show")};r(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),function(l){"use strict";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on("scroll.bs.affix.data-api",l.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data("bs.affix"),i="object"==typeof o&&o;e||t.data("bs.affix",e=new h(this,i)),"string"==typeof o&&e[o]()})}h.VERSION="3.4.1",h.RESET="affix affix-top affix-bottom",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,S)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=E)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{if(d.cssSupportsSelector&&!CSS.supports("selector(:is("+c+"))"))throw new Error;return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===E&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[E]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,S=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssSupportsSelector=ce(function(){return CSS.supports("selector(*)")&&C.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=E,!C.getElementsByName||!C.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&S)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssSupportsSelector||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&S&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),N.test(r[1])&&E.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=S.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,D=E(S);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=S.createDocumentFragment().appendChild(S.createElement("div")),(fe=S.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",v.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||E.expando+"_"+Ct.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||E.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?E(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=S.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(r)):t=S),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0 thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[],globalize:0,imgAttr:0},css:{table:"tablesorter",cssHasChild:"tablesorter-hasChildRow",childRow:"tablesorter-childRow",colgroup:"tablesorter-colgroup",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"},language:{sortAsc:"Ascending sort applied, ",sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",sortDisabled:"sorting is disabled",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"},regex:{templateContent:/\{content\}/g,templateIcon:/\{icon\}/g,templateName:/\{name\}/i,spaces:/\s+/g,nonWord:/\W/g,formElements:/(input|select|button|textarea)/i,chunk:/(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,chunks:/(^\\0|\\0$)/,hex:/^0x[0-9a-f]+$/i,comma:/,/g,digitNonUS:/[\s|\.]/g,digitNegativeTest:/^\s*\([.\d]+\)/,digitNegativeReplace:/^\s*\(([.\d]+)\)/,digitTest:/^[\-+(]?\d+[)]?$/,digitReplace:/[,.'"\s]/g},string:{max:1,min:-1,emptymin:1,emptymax:-1,zero:0,none:0,"null":0,top:!0,bottom:!1},keyCodes:{enter:13},dates:{},instanceMethods:{},setup:function(t,r){if(t&&t.tHead&&0!==t.tBodies.length&&!0!==t.hasInitialized){var e,o="",s=A(t),a=A.metadata;t.hasInitialized=!1,t.isProcessing=!0,t.config=r,A.data(t,"tablesorter",r),L.debug(r,"core")&&(console[console.group?"group":"log"]("Initializing tablesorter v"+L.version),A.data(t,"startoveralltimer",new Date)),r.supportsDataObject=((e=A.fn.jquery.split("."))[0]=parseInt(e[0],10),1
':"",d.$headers=A(A.map(d.$table.find(d.selectorHeaders),function(e,t){var r,o,s,a,n,i=A(e);if(!L.getClosest(i,"tr").hasClass(d.cssIgnoreRow))return/(th|td)/i.test(e.nodeName)||(n=L.getClosest(i,"th, td"),i.attr("data-column",n.attr("data-column"))),r=L.getColumnData(d.table,d.headers,t,!0),d.headerContent[t]=i.html(),""===d.headerTemplate||i.find("."+L.css.headerIn).length||(a=d.headerTemplate.replace(L.regex.templateContent,i.html()).replace(L.regex.templateIcon,i.find("."+L.css.icon).length?"":l),d.onRenderTemplate&&(o=d.onRenderTemplate.apply(i,[t,a]))&&"string"==typeof o&&(a=o),i.html('
'+a+"
")),d.onRenderHeader&&d.onRenderHeader.apply(i,[t,d,d.$table]),s=parseInt(i.attr("data-column"),10),e.column=s,n=L.getOrder(L.getData(i,r,"sortInitialOrder")||d.sortInitialOrder),d.sortVars[s]={count:-1,order:n?d.sortReset?[1,0,2]:[1,0]:d.sortReset?[0,1,2]:[0,1],lockedOrder:!1,sortedBy:""},void 0!==(n=L.getData(i,r,"lockedOrder")||!1)&&!1!==n&&(d.sortVars[s].lockedOrder=!0,d.sortVars[s].order=L.getOrder(n)?[1,1]:[0,0]),d.headerList[t]=e,i.addClass(L.css.header+" "+d.cssHeader),L.getClosest(i,"tr").addClass(L.css.headerRow+" "+d.cssHeaderRow).attr("role","row"),d.tabIndex&&i.attr("tabindex",0),e})),d.$headerIndexed=[],r=0;r'),t=n.$table.width(),s=(o=n.$tbodies.find("tr:first").children(":visible")).length,a=0;a").css("width",r));n.$table.prepend(i)}},getData:function(e,t,r){var o,s,a="",n=A(e);return n.length?(o=!!A.metadata&&n.metadata(),s=" "+(n.attr("class")||""),void 0!==n.data(r)||void 0!==n.data(r.toLowerCase())?a+=n.data(r)||n.data(r.toLowerCase()):o&&void 0!==o[r]?a+=o[r]:t&&void 0!==t[r]?a+=t[r]:" "!==s&&s.match(" "+r+"-")&&(a=s.match(new RegExp("\\s"+r+"-([\\w-]+)"))[1]||""),A.trim(a)):""},getColumnData:function(e,t,r,o,s){if("object"!=typeof t||null===t)return t;var a,n=(e=A(e)[0]).config,i=s||n.$headers,d=n.$headerIndexed&&n.$headerIndexed[r]||i.find('[data-column="'+r+'"]:last');if(void 0!==t[r])return o?t[r]:t[i.index(d)];for(a in t)if("string"==typeof a&&d.filter(a).add(d.find(a)).length)return t[a]},isProcessing:function(e,t,r){var o=(e=A(e))[0].config,s=r||e.find("."+L.css.header);t?(void 0!==r&&0'),A.fn.detach?t.detach():t.remove();var o=A(e).find("colgroup.tablesorter-savemyplace");t.insertAfter(o),o.remove(),e.isProcessing=!1},clearTableBody:function(e){A(e)[0].config.$tbodies.children().detach()},characterEquivalents:{a:"áàâãäąå",A:"ÁÀÂÃÄĄÅ",c:"çćč",C:"ÇĆČ",e:"éèêëěę",E:"ÉÈÊËĚĘ",i:"íìİîïı",I:"ÍÌİÎÏ",o:"óòôõöō",O:"ÓÒÔÕÖŌ",ss:"ß",SS:"ẞ",u:"úùûüů",U:"ÚÙÛÜŮ"},replaceAccents:function(e){var t,r="[",o=L.characterEquivalents;if(!L.characterRegex){for(t in L.characterRegexArray={},o)"string"==typeof t&&(r+=o[t],L.characterRegexArray[t]=new RegExp("["+o[t]+"]","g"));L.characterRegex=new RegExp(r+"]")}if(L.characterRegex.test(e))for(t in o)"string"==typeof t&&(e=e.replace(L.characterRegexArray[t],t));return e},validateOptions:function(e){var t,r,o,s,a="headers sortForce sortList sortAppend widgets".split(" "),n=e.originalSettings;if(n){for(t in L.debug(e,"core")&&(s=new Date),n)if("undefined"===(o=typeof L.defaults[t]))console.warn('Tablesorter Warning! "table.config.'+t+'" option not recognized');else if("object"===o)for(r in n[t])o=L.defaults[t]&&typeof L.defaults[t][r],A.inArray(t,a)<0&&"undefined"===o&&console.warn('Tablesorter Warning! "table.config.'+t+"."+r+'" option not recognized');L.debug(e,"core")&&console.log("validate options time:"+L.benchmark(s))}},restoreHeaders:function(e){var t,r,o=A(e)[0].config,s=o.$table.find(o.selectorHeaders),a=s.length;for(t=0;t tr").children("th, td");!1===t&&0<=A.inArray("uitheme",a.widgets)&&(s.triggerHandler("applyWidgetId",["uitheme"]),s.triggerHandler("applyWidgetId",["zebra"])),n.find("tr").not(i).remove(),o="sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave "+"keypress sortBegin sortEnd resetToLoadState ".split(" ").join(a.namespace+" "),s.removeData("tablesorter").unbind(o.replace(L.regex.spaces," ")),a.$headers.add(d).removeClass([L.css.header,a.cssHeader,a.cssAsc,a.cssDesc,L.css.sortAsc,L.css.sortDesc,L.css.sortNone].join(" ")).removeAttr("data-column").removeAttr("aria-label").attr("aria-disabled","true"),i.find(a.selectorSort).unbind("mousedown mouseup keypress ".split(" ").join(a.namespace+" ").replace(L.regex.spaces," ")),L.restoreHeaders(e),s.toggleClass(L.css.table+" "+a.tableClass+" tablesorter-"+a.theme,!1===t),s.removeClass(a.namespace.slice(1)),e.hasInitialized=!1,delete e.config.cache,"function"==typeof r&&r(e),L.debug(a,"core")&&console.log("tablesorter has been removed")}}};A.fn.tablesorter=function(t){return this.each(function(){var e=A.extend(!0,{},L.defaults,t,L.instanceMethods);e.originalSettings=t,!this.hasInitialized&&L.buildTable&&"TABLE"!==this.nodeName?L.buildTable(this,e):L.setup(this,e)})},window.console&&window.console.log||(L.logs=[],console={},console.log=console.warn=console.error=console.table=function(){var e=1>>0,s=0;sAe(e)?(r=e+1,t-Ae(e)):(r=e,t);return{year:r,dayOfYear:n}}function qe(e,t,n){var s,i,r=ze(e.year(),t,n),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+P(i=e.year()-1,t,n):r>P(e.year(),t,n)?(s=r-P(e.year(),t,n),i=e.year()+1):(i=e.year(),s=r),{week:s,year:i}}function P(e,t,n){var s=ze(e,t,n),t=ze(e+1,t,n);return(Ae(e)-s+t)/7}s("w",["ww",2],"wo","week"),s("W",["WW",2],"Wo","isoWeek"),t("week","w"),t("isoWeek","W"),n("week",5),n("isoWeek",5),v("w",p),v("ww",p,w),v("W",p),v("WW",p,w),Te(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=g(e)});function Be(e,t){return e.slice(t,7).concat(e.slice(0,t))}s("d",0,"do","day"),s("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),s("e",0,0,"weekday"),s("E",0,0,"isoWeekday"),t("day","d"),t("weekday","e"),t("isoWeekday","E"),n("day",11),n("weekday",11),n("isoWeekday",11),v("d",p),v("e",p),v("E",p),v("dd",function(e,t){return t.weekdaysMinRegex(e)}),v("ddd",function(e,t){return t.weekdaysShortRegex(e)}),v("dddd",function(e,t){return t.weekdaysRegex(e)}),Te(["dd","ddd","dddd"],function(e,t,n,s){s=n._locale.weekdaysParse(e,s,n._strict);null!=s?t.d=s:m(n).invalidWeekday=e}),Te(["d","e","E"],function(e,t,n,s){t[s]=g(e)});var Je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Qe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Xe="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=k,et=k,tt=k;function nt(){function e(e,t){return t.length-e.length}for(var t,n,s,i=[],r=[],a=[],o=[],u=0;u<7;u++)s=l([2e3,1]).day(u),t=M(this.weekdaysMin(s,"")),n=M(this.weekdaysShort(s,"")),s=M(this.weekdays(s,"")),i.push(t),r.push(n),a.push(s),o.push(t),o.push(n),o.push(s);i.sort(e),r.sort(e),a.sort(e),o.sort(e),this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function st(){return this.hours()%12||12}function it(e,t){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rt(e,t){return t._meridiemParse}s("H",["HH",2],0,"hour"),s("h",["hh",2],0,st),s("k",["kk",2],0,function(){return this.hours()||24}),s("hmm",0,0,function(){return""+st.apply(this)+r(this.minutes(),2)}),s("hmmss",0,0,function(){return""+st.apply(this)+r(this.minutes(),2)+r(this.seconds(),2)}),s("Hmm",0,0,function(){return""+this.hours()+r(this.minutes(),2)}),s("Hmmss",0,0,function(){return""+this.hours()+r(this.minutes(),2)+r(this.seconds(),2)}),it("a",!0),it("A",!1),t("hour","h"),n("hour",13),v("a",rt),v("A",rt),v("H",p),v("h",p),v("k",p),v("HH",p,w),v("hh",p,w),v("kk",p,w),v("hmm",ge),v("hmmss",we),v("Hmm",ge),v("Hmmss",we),D(["H","HH"],x),D(["k","kk"],function(e,t,n){e=g(e);t[x]=24===e?0:e}),D(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),D(["h","hh"],function(e,t,n){t[x]=g(e),m(n).bigHour=!0}),D("hmm",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s)),m(n).bigHour=!0}),D("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i)),m(n).bigHour=!0}),D("Hmm",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s))}),D("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i))});k=de("Hours",!0);var at,ot={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ce,monthsShort:Ue,week:{dow:0,doy:6},weekdays:Je,weekdaysMin:Xe,weekdaysShort:Qe,meridiemParse:/[ap]\.?m?\.?/i},R={},ut={};function lt(e){return e&&e.toLowerCase().replace("_","-")}function ht(e){for(var t,n,s,i,r=0;r=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s=t-1)break;t--}r++}return at}function dt(t){var e;if(void 0===R[t]&&"undefined"!=typeof module&&module&&module.exports&&null!=t.match("^[^/\\\\]*$"))try{e=at._abbr,require("./locale/"+t),ct(e)}catch(e){R[t]=null}return R[t]}function ct(e,t){return e&&((t=o(t)?mt(e):ft(e,t))?at=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),at._abbr}function ft(e,t){if(null===t)return delete R[e],null;var n,s=ot;if(t.abbr=e,null!=R[e])Q("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=R[e]._config;else if(null!=t.parentLocale)if(null!=R[t.parentLocale])s=R[t.parentLocale]._config;else{if(null==(n=dt(t.parentLocale)))return ut[t.parentLocale]||(ut[t.parentLocale]=[]),ut[t.parentLocale].push({name:e,config:t}),null;s=n._config}return R[e]=new K(X(s,t)),ut[e]&&ut[e].forEach(function(e){ft(e.name,e.config)}),ct(e),R[e]}function mt(e){var t;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return at;if(!a(e)){if(t=dt(e))return t;e=[e]}return ht(e)}function _t(e){var t=e._a;return t&&-2===m(e).overflow&&(t=t[O]<0||11We(t[Y],t[O])?b:t[x]<0||24P(r,u,l)?m(s)._overflowWeeks=!0:null!=h?m(s)._overflowWeekday=!0:(d=$e(r,a,o,u,l),s._a[Y]=d.year,s._dayOfYear=d.dayOfYear)),null!=e._dayOfYear&&(i=bt(e._a[Y],n[Y]),(e._dayOfYear>Ae(i)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),h=Ze(i,0,e._dayOfYear),e._a[O]=h.getUTCMonth(),e._a[b]=h.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=c[t]=n[t];for(;t<7;t++)e._a[t]=c[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[x]&&0===e._a[T]&&0===e._a[N]&&0===e._a[Ne]&&(e._nextDay=!0,e._a[x]=0),e._d=(e._useUTC?Ze:je).apply(null,c),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[x]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(m(e).weekdayMismatch=!0)}}function Tt(e){if(e._f===f.ISO_8601)St(e);else if(e._f===f.RFC_2822)Ot(e);else{e._a=[],m(e).empty=!0;for(var t,n,s,i,r,a=""+e._i,o=a.length,u=0,l=ae(e._f,e._locale).match(te)||[],h=l.length,d=0;de.valueOf():e.valueOf()"}),i.toJSON=function(){return this.isValid()?this.toISOString():null},i.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},i.unix=function(){return Math.floor(this.valueOf()/1e3)},i.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},i.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},i.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},i.isLocal=function(){return!!this.isValid()&&!this._isUTC},i.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},i.isUtc=At,i.isUTC=At,i.zoneAbbr=function(){return this._isUTC?"UTC":""},i.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},i.dates=e("dates accessor is deprecated. Use date instead.",ke),i.months=e("months accessor is deprecated. Use month instead",Ge),i.years=e("years accessor is deprecated. Use year instead",Ie),i.zone=e("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?(this.utcOffset(e="string"!=typeof e?-e:e,t),this):-this.utcOffset()}),i.isDSTShifted=e("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e,t={};return $(t,this),(t=Nt(t))._a?(e=(t._isUTC?l:W)(t._a),this._isDSTShifted=this.isValid()&&0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Failures Overview + + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Failures Overview

+

The following summary displays scenarios that failed.

+
+
+ + +
+
+
+ +

You have no failed scenarios in your Cucumber report

+ +
+
+
+ +
+ + + + + diff --git a/docs/overview-features.html b/docs/overview-features.html new file mode 100755 index 0000000..cf0fed5 --- /dev/null +++ b/docs/overview-features.html @@ -0,0 +1,1860 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Features Overview + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Features Statistics

+

The following graphs show passing and failing statistics for features

+
+
+ + +
+
+
+ +
+
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Pyspark Pipeline Step -> Asynchronous Inbound/Outbound Type Patterns38000038110110.062Passed
Pyspark Pipeline Step -> Synchronous Inbound/Outbound Type Patterns31000031130130.065Passed
Placeholder test2000021010.009Passed
Validation240000248080.001Passed
Basic Pipeline Lineage Event Test4000041010.130Passed
Example feature file3000031010.000Passed
Example record with required string field and validated string field210000217070.001Passed
Placeholder test2000021010.000Passed
Placeholder test2000021010.001Passed
Example feature file3000031010.001Passed
Placeholder test2000021010.000Passed
Placeholder test2000021010.000Passed
Test archetype-post-generate script540000546060.572Passed
As an aiSSEMBLE user, I want my v1 chart images updated to the latest aiSSEMBLE version automatically so upgrade errors are minimized270000276060.044Passed
As an aiSSEMBLE user, I want my chart dependencies updated to the latest aiSSEMBLE version automatically so upgrade errors are minimized200000205050.026Passed
As an aiSSEMBLE user, I want my Poetry Python packages updated to the latest naming conventions and versions automatically so upgrade errors are minimized9000093030.029Passed
Tilt file upgrade migration210000217070.017Passed
Migrate Delta Lake Spark dependencies120000124040.028Passed
IT infrastructure is updated to use JDK 176000062020.003Passed
Updates the affected java classes from their old package name to their new package name6000062020.003Passed
Migrate a Maven Shade Plugin to use the updated Log4j dependency7000072020.007Passed
Update the pom dependencies previously managed by the aiSSEMBLE BOM to include the necessary version140000144040.011Passed
Updates all references to the quarkus-bom and quarkus-universe-bom to use the new aissemble-quarkus-bom for managing Quarkus dependencies9000093030.012Passed
Migrate a Spark pipeline module CDI factoru with the new CDI classes to ensure messaging compatibility with Java 17250000256060.010Passed
Migrate a Spark pipeline module pom.xml with the new CDI classes dependency to ensure messaging compatibility with Java 17250000256060.011Passed
Migrate a Spark pipeline module pom.xml with the javax servlet-api dependency110000113030.011Passed
Spark is updated to use appropriate v3.5.0 configs6000062020.005Passed
Utilities -> YAML130000132020.006Passed
Drift Detection -> Standard Deviation can be Calculated on Control Data27000027100100.155Passed
Drift Detection -> Calculate Upper and Lower Bounds for Detecting Drift160000164040.000Passed
Drift Detection -> Default Standard Deviation Drift Detection140000145050.123Passed
Drift Detection -> Detect Drift using Standard Deviations330000337070.026Passed
Drift Detection -> Configure rules for detecting drift29000029100100.008Passed
Drift Detection -> Read policies from a json file120000124040.018Passed
Drift Detection -> Detect drift using a policy that has a single rule140000144040.011Passed
Drift Detection -> Send an alert about the status of drift detection200000207070.017Passed
Policy Configuration -> Configure rules for policies42000042130130.092Passed
Policy Based Configuration -> Read policies from a json file120000124040.060Passed
Load configurations at specified URI based on environment context56000056150150.522Passed
Modify kubernetes resources with config values using a mutating webhook6000061010.151Passed
Versioning3000031010.001Passed
Encryption -> Read policies from a json file6000062020.242Passed
Data Encryption -> Data encryption using a policy3000031010.005Passed
Policy Configuration -> Configure rules for policies42000042130130.004Passed
Policy Based Configuration -> Read policies from a json file160000165050.010Passed
Model Training API120000124041.410Passed
Baseline Lineage Instance can be updated by model facets200000205050.001Passed
Asynchronous handling of messages is simplified120000124040.054Passed
Data lineage wrapper classes can be used to produce equivalent classes from the OpenLineage project57000057170170.009Passed
Emit data lineage events160000165050.249Passed
Baseline data lineage type wrappers can be converted to equivalent openlineage types.48000048130130.008Passed
Baseline data lineage type wrappers can be instantiated, and validate their parameters appropriately.26000026130130.001Passed
Specify composite of semantically defined types1440000144360360.350Passed
Generating pipeline resources2580000258350351.609Passed
Dependency versions can be read in from maven properties.3000031010.000Passed
Generating deployments4000042020.029Passed
Specify dictionary of semantically defined types1050000105350350.166Passed
Generating a docker module120000123030.054Passed
Encrypting record fields8000082020.014Passed
Metamodel name translations51000051140140.000Passed
Specify pipelines to be generated1240000124410410.198Passed
Specify post-actions to be generated120000124040.018Passed
Minimum Python version can be set in the pyproject.toml.vm files.240000246060.265Passed
Specify record of semantically defined types1740000174430430.312Passed
Generating spark application pipeline resources150000153030.235Passed
Configure and Execute Mediation38000038100100.003Passed
Messaging -> CDI Configuration9000093030.418Passed
Configure messaging topics and channels120000124040.755Passed
Receive messages through the messaging service200000205050.008Passed
Send messages through the messaging service6000062020.001Passed
Subscribe to a channel listener through the messaging service8000082020.000Passed
Enqueue messages through the python client7000072021.762Passed
client-server integration230000236065.529Passed
Alerting -> Publish and Subscribe3000031010.017Passed
The correct status is returned depending on the state of the system when metadata is retrieved3000031014.751Passed
Data Transform -> Data transformation using a policy3000031011.403Passed
Data Transform -> Data transformation using a policy3000031012.772Passed
Pipeline messaging steps can be configured180000184040.023Passed
Object store credentials can be verified for read and write access2000021010.005Passed
SparkSession creation4000042023.330Passed
Specify custom attributes1170000117390390.725Passed
Specify authorization policies1050000105350350.003Passed
Create JSON Web Tokens based on PDP rules130000136060.141Passed
Convert data element to hash5000052020.057Passed
Encryption3000031010.005Passed
Alerting -> Slack notifications2000021010.779Passed
Require a certain helm version to be installed when building aiSSEMBLE180000186060.013Passed
229700002297637063730.03687
100.00%0.00%0.00%0.00%0.00%100.00%0.00%100.00%
+ +
+
+
+ + + + + diff --git a/docs/overview-steps.html b/docs/overview-steps.html new file mode 100755 index 0000000..8133838 --- /dev/null +++ b/docs/overview-steps.html @@ -0,0 +1,7173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Steps Overview + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Steps Statistics

+

The following graph shows step statistics for this build. Below list is based on results. + step does not provide information about result then is not listed below. + Additionally @Before and @After are not counted because they are part of the scenarios, not steps.

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ImplementationOccurrencesAverage durationMax durationTotal durationsRatio
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.aPipelineConfigurationForTheStep()40.0000.0000.000100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.aStepWithIncomingMessaging()10.0000.0000.000100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.aStepWithOutgoingAndIncomingMessaging()10.0060.0060.006100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.aStepWithOutgoingMessaging()10.0020.0020.002100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.aStepWithOverrideConfigurations()10.0000.0000.000100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.messagesFlowFromTheExternalSystem()30.0030.0090.010100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp()40.3951.4651.583100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown()40.0050.0110.022100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.theConfigurationDirectsTheMessagingToTheStep()30.0000.0000.000100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.theConfigurationDirectsTheStepResultToTheExternalSystem()30.0000.0000.000100.00%
com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.theStepIsExecuted()10.0000.0000.000100.00%
com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.aProperiesFileExists()10.0010.0010.001100.00%
com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.setUp()10.3520.3520.352100.00%
com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.tearDown()10.0030.0030.003100.00%
com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.theCredentialsAreUsedToVerifyObjectStoreConnectivity()10.0030.0030.003100.00%
com.boozallen.aiops.mda.basic.PipelineSteps.a_postcondition_results()10.0000.0000.000100.00%
com.boozallen.aiops.mda.basic.PipelineSteps.a_precondition()10.0000.0000.000100.00%
com.boozallen.aiops.mda.basic.PipelineSteps.an_action_occurs()10.0000.0000.000100.00%
com.boozallen.aiops.mda.basic.PipelineSteps.setUp()10.0010.0010.001100.00%
com.boozallen.aiops.mda.basic.PipelineSteps.tearDown()10.0000.0000.000100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.a_dictionary_and_0_or_more_record_models()300.0010.0030.042100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.a_module_with_spark_functionality_with_generated_in_under(java.lang.String,java.lang.String)120.0020.0110.026100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.a_pipeline_using(java.lang.String,java.lang.String)400.0010.0030.043100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.a_pipeline_using_named(java.lang.String,java.lang.String,java.lang.String)60.0000.0010.003100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.a_pre_existing_semantic_data_module_called_with(java.lang.String,java.lang.String)100.0000.0010.007100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.a_project_named(java.lang.String)350.0000.0050.030100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.a_semantic_data_module_with_generated_in_under(java.lang.String,java.lang.String)60.0000.0010.005100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.has_a_dependency_on(java.lang.String,java.lang.String)60.0000.0010.005100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.no_module_is_generated_under(java.lang.String)180.0000.0000.001100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario)350.0050.0290.191100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_core_semantic_data_classes_are_generated_in_the_module()60.0000.0000.000100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_module_generates_the_profile(java.lang.String,java.lang.String)80.0010.0020.012100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_pipeline_is_created_with_the_RDBMS_persist_type()10.0000.0000.000100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_pipeline_pom_has_a_dependency_on(java.lang.String)40.0020.0040.010100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_pipeline_pom_has_a_dependency_on(java.lang.String,java.lang.String)60.0010.0010.007100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_pipeline_pom_has_the_plugin(java.lang.String)20.0010.0010.002100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_pipelines_are_validated()10.0790.0790.079100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_pipelines_child_poms_have_a_dependency_on(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_pipelines_child_poms_have_the_plugin(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_profile_is_generated(java.lang.String)350.0370.0911.324100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_pyproject_toml_file_has_a_dependency_on(java.lang.String)50.0000.0000.002100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_spark_functionality_is_generated_in_the_module()60.0000.0000.000100.00%
com.boozallen.aiops.mda.generator.DataRecordsModuleStep.the_user_is_notified_that_the_module_must_be_added_to_the_parent_pom(java.lang.String)180.0000.0000.000100.00%
com.boozallen.aiops.mda.generator.DeploymentSteps.setup(io.cucumber.java.Scenario)20.0020.0030.004100.00%
com.boozallen.aiops.mda.generator.DeploymentSteps.the_deployment_generated(java.lang.String)20.0140.0170.029100.00%
com.boozallen.aiops.mda.generator.DeploymentSteps.the_placeholder_sealed_secret_is_created()20.0000.0000.000100.00%
com.boozallen.aiops.mda.generator.DockerSteps.a_data_flow_pipeline_using_with_data_lineage_enabled(java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.generator.DockerSteps.a_machine_learning_pipeline_using_with_model_lineage_enabled(java.lang.String)10.0010.0010.001100.00%
com.boozallen.aiops.mda.generator.DockerSteps.a_project_named_with_a_source_code_url_of(java.lang.String,java.lang.String)30.0000.0000.002100.00%
com.boozallen.aiops.mda.generator.DockerSteps.my_lineage_property_is_set_to(java.lang.String,java.lang.String)30.0000.0010.002100.00%
com.boozallen.aiops.mda.generator.DockerSteps.the_docker_profile_is_generated(java.lang.String)30.0150.0170.047100.00%
com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.a_pipeline_using_the_implementation(java.lang.String,java.lang.String)10.0010.0010.001100.00%
com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.a_pipeline_with_step_type_using_the_implementation(java.lang.String,java.lang.String,java.lang.String)20.0010.0010.002100.00%
com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.a_project_with_the_name(java.lang.String)60.0000.0010.004100.00%
com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.a_record_model_with_a_corresponding_dictionary_type_defined()30.0010.0010.004100.00%
com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario)60.0040.0110.025100.00%
com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.the_is_generated_with_the_minimum_Python_version(java.lang.String,java.lang.String)60.0000.0010.003100.00%
com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.the_profile_is_generated(java.lang.String,java.lang.String)60.0410.0660.249100.00%
com.boozallen.aiops.mda.generator.SparkApplicationStep.a_dataflow_pipeline_using_data_delivery_spark()30.0000.0000.002100.00%
com.boozallen.aiops.mda.generator.SparkApplicationStep.a_file_store_named(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aiops.mda.generator.SparkApplicationStep.a_spark_project_named(java.lang.String)30.0000.0000.001100.00%
com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario)30.0020.0020.006100.00%
com.boozallen.aiops.mda.generator.SparkApplicationStep.the_and_configurations_are_not_generated(java.lang.String,java.lang.String,java.lang.String,java.lang.String)40.0000.0010.002100.00%
com.boozallen.aiops.mda.generator.SparkApplicationStep.the_profile_data_delivery_spark_pipeline_is_generated()30.0760.0850.228100.00%
com.boozallen.aiops.mda.generator.SparkApplicationStep.two_file_stores_named_and(java.lang.String,java.lang.String)10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_described_by(java.lang.String,java.lang.String)30.0010.0020.005100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_a_description(java.lang.String)20.0010.0010.002100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_a_field_specifying_the_column_as_optional()10.0020.0020.002100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_a_field_specifying_the_column_is_required()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_a_field_specifying_the_column_name(java.lang.String)30.0010.0010.004100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_a_field_that_has_a_description(java.lang.String)20.0020.0020.004100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_a_field_that_has_dictionary_type_named(java.lang.String)150.0010.0020.021100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_a_field_that_has_dictionary_type_named_and_a_drift_policy_of(java.lang.String,java.lang.String)20.0010.0020.003100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_a_field_that_has_dictionary_type_named_and_a_ethics_policy_of(java.lang.String,java.lang.String)20.0020.0020.004100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_a_field_that_has_dictionary_type_named_and_a_protection_policy_of(java.lang.String,java.lang.String)20.0010.0010.002100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_composite_with_the_fields_named(java.util.List<java.lang.String>)30.0020.0020.006100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_valid_composite_is_available_can_be_looked_up_by_the_name_and(java.lang.String,java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_valid_composite_is_available_with_a_description_of(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.a_valid_composite_is_available_with_fields_named(java.util.List<java.lang.String>)30.0020.0070.007100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.composites_are_read()360.0050.0520.210100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper()360.0080.1890.302100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_and_has_a_description_of(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_and_has_a_drift_policy_of(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_and_has_a_ethics_policy_of(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_and_has_a_no_drift_policy_specified()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_and_has_a_no_ethics_policy_specified()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_and_has_a_no_protection_policy_specified()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_and_has_a_protection_policy_of(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_and_marked_as_optional()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_and_marked_as_required()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_with_a_column_name_of(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.CompositeSteps.the_composite_field_is_available_with_a_simple_type_of(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DependencySteps.configuration_is_loaded()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DependencySteps.props_are_filtered()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DependencySteps.version_information_is_accessible()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_described_by(java.lang.String,java.lang.String)30.0010.0010.003100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_an_empty_drift_policy_urn()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_an_empty_ethics_policy_urn()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_an_empty_protection_policy_urn()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_drift_policy_urn_of(java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_empty_string_as_a_format()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_ethics_policy_urn_of(java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_length_validation_and(java.lang.Integer,java.lang.Integer)50.0010.0010.005100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_max_length_validation(java.lang.Integer)20.0010.0010.002100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_min_length_validation(java.lang.Integer)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_protection_policy_urn_of(java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_range_validation_and(java.lang.String,java.lang.String)40.0010.0010.004100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_type_with_scale_of(java.lang.Integer)50.0010.0010.005100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_with_the_following_types(java.util.List<com.boozallen.aiops.mda.metamodel.element.DictionaryTypeElement>)20.0010.0020.003100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_dictionary_with_the_formats(java.lang.String)20.0020.0040.004100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_is_available_can_be_looked_up_by_the_name_and(java.lang.String,java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_no_drift_policy_urn()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_no_ethics_policy_urn()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_no_protection_policy_urn()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_the_drift_policy_urn(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_the_ethics_policy_urn(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_the_formats(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_the_length_validations_and(java.lang.Integer,java.lang.Integer)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_the_max_length(java.lang.Integer)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_the_min_length(java.lang.Integer)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_the_protection_policy_urn(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_the_range_validations_and(java.lang.String,java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_contains_the_scale(java.lang.Integer)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_is_available_that_does_not_contains_any_formats()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_returns_an_error_around_length_validation()30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_returns_an_error_around_range_validation()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.a_valid_dictionary_type_returns_an_error_around_scale_validation()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp()350.0000.0030.020100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.dictionaries_are_read()350.0030.0100.127100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper()350.0000.0000.003100.00%
com.boozallen.aiops.mda.metamodel.element.DictionarySteps.the_dictionary_returns_the_following_types(java.util.List<com.boozallen.aiops.mda.metamodel.element.DictionaryTypeElement>)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.EncryptedFieldSteps.a_record_with_a_field_specifying_the_column_name_as_secure(java.lang.String)20.0010.0010.002100.00%
com.boozallen.aiops.mda.metamodel.element.EncryptedFieldSteps.encrypted_records_are_read()20.0030.0040.007100.00%
com.boozallen.aiops.mda.metamodel.element.EncryptedFieldSteps.setUpObjectMapper()20.0030.0030.006100.00%
com.boozallen.aiops.mda.metamodel.element.EncryptedFieldSteps.the_following_dictionary_types_are_defined(java.util.List<com.boozallen.aiops.mda.metamodel.element.DictionaryTypeElement>)20.0020.0020.004100.00%
com.boozallen.aiops.mda.metamodel.element.EncryptedFieldSteps.the_record_field_is_available_and_encrypted_with_the_encryption_policy(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.a_pipeline_named(java.lang.String)50.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.a_pipeline_named_and_a_step_named(java.lang.String,java.lang.String)60.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.a_spark_pipeline_named_and_a_step_named(java.lang.String,java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup()140.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp()140.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.the_maven_translated_step_name_is(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.the_names_are_translated_to_java_class_format()30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.the_names_are_translated_to_maven_artifact_id_format()30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.the_names_are_translated_to_python_format()30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.the_names_are_translated_to_python_package_format()50.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.the_translated_maven_pipeline_name_is(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.the_translated_pipeline_class_name_is(java.lang.String)60.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.the_translated_pipeline_name_is(java.lang.String)50.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.the_translated_step_class_name_is(java.lang.String)60.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.aPipelineIsConfiguredForMessagingWithoutAChannelName()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.aValidPipelineWitProvenanceDisabled()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.aValidPipelineWithMessaging()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.aValidPipelineWithMessagingOFF()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.aValidPipelineWithProvenanceConfiguration()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_pipeline_described_by(java.lang.String,java.lang.String,java.lang.String,java.lang.String)70.0000.0010.005100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_pipeline_with_with_the_name_and(java.lang.Integer,java.lang.String,java.lang.String)20.0010.0010.003100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_data_delivery_pipeline_with_lineage_enabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_data_delivery_pipeline_with_lineage_undefined()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_data_flow_pyspark_pipeline_with_a_RDBMS_ingest_step()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_pipeline()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_pipeline_and_a_valid_data_flow_pipeline()40.0010.0010.006100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_pipeline_with_a_training_step()20.0010.0010.002100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_pipeline_with_an_airflow_executionHelper()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_pipeline_with_an_airflow_executionHelper_and_no_training_step()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_pipeline_with_data_profiling_set_to_false()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_pipeline_with_data_profiling_set_to_true()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_pipeline_with_data_profiling_undefined()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_pipeline_with_versioning_disabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_machine_learning_training_pipeline_with_lineage_enabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_pipeline_is_available_can_be_looked_up_by_the_name_and(java.lang.String,java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.a_valid_pipeline_with_a_step_containing_a_specified_persist_save_mode()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.anErrorIsThrown()30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.anOtherwiseValidDataDeliveryPipelineWithModelLineageEnabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.anOtherwiseValidMachineLearningPipelineWithDataLineageEnabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.an_otherwise_valid_pipeline_with_a_step_containing_a_configuration_item_with_key_and_value(java.lang.String,java.lang.String)20.0010.0010.002100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.an_otherwise_valid_pipeline_with_a_step_containing_an_unspecified_inbound_type()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.an_otherwise_valid_pipeline_with_a_step_name_and_type(java.lang.String,java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.an_otherwise_valid_pipeline_with_an_unspecified_outbound_type()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.an_otherwise_valid_pipeline_with_an_unspecified_persist_type()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.are_found_in_the_pipeline_when_it_is_looked_up_by_the_name_and(java.lang.Integer,java.lang.String,java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup()410.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.data_flow_artifact_ids_are_requested()40.0050.0060.023100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.machine_learning_artifact_ids_are_requested()30.0030.0030.010100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.machine_learning_pipelines_are_validated()30.0020.0030.008100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.machine_learning_training_is_created_with_model_lineage()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.machine_learning_training_is_created_without_model_lineage()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.only_the_data_flow_artifact_ids_are_retrieved()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.pipelines_are_read()310.0030.0060.113100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.platforms_are_specified_for_a_pipeline()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp()410.0000.0000.003100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.step_artifact_ids_for_data_flow_are_retrieved()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.step_artifact_ids_for_machine_learning_are_retrieved()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.thePipelineIsCreatedWithTheDefaultProvenanceCreation()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.thePipelineIsCreatedWithoutIncludingProvenanceCreation()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.thePipelineStepIsCreatedWithAlertingDisabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.thePipelineStepIsCreatedWithAlertingEnabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_data_flow_pipeline_does_not_yield_mlflow_artifacts()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_generator_throws_an_exception_about_invalid_metamodel_information()110.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_machine_learning_pipeline_does_not_yield_airflow_artifacts()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_machine_learning_pipeline_yields_airflow_artifacts()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_machine_learning_pipeline_yields_mlflow_artifacts()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_pipeline_is_created_with_lineage_disabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_pipeline_is_created_with_lineage_enabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_pipeline_is_created_with_the_specified_persist_save_mode()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_pipeline_is_created_with_the_specified_platforms()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_pipeline_is_created_with_versioning()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_pipeline_is_created_without_data_profiling()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.the_pipeline_is_created_without_versioning()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PipelineSteps.thereAreValidationErrorMessages()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PostActionSteps.an_error_is_thrown_due_to_missing_post_action_metamodel_information()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PostActionSteps.an_otherwise_valid_pipeline_with_a_step_containing_a_model_conversion_post_action_with_model_source_and_model_target(java.lang.String,java.lang.String)20.0010.0010.002100.00%
com.boozallen.aiops.mda.metamodel.element.PostActionSteps.an_otherwise_valid_pipeline_with_a_step_containing_a_post_action_with_name_and_type(java.lang.String,java.lang.String)20.0010.0010.002100.00%
com.boozallen.aiops.mda.metamodel.element.PostActionSteps.cleanup()40.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PostActionSteps.setUp()40.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PostActionSteps.the_generator_throws_an_exception_due_to_invalid_post_action_metamodel_information()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.PostActionSteps.the_pipeline_with_post_actions_is_read()40.0030.0030.013100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.aValidRecordWithNoPysparkSupport()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.aValidRecordWithPysparkSupport()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_composite_named_with_multiple_fields(java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_described_by(java.lang.String,java.lang.String)30.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_description(java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_field_specifying_the_column_as_optional()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_field_specifying_the_column_is_required()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_field_specifying_the_column_name(java.lang.String)30.0010.0010.003100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_field_that_has_a_description(java.lang.String)20.0020.0030.004100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_field_that_has_a_field_with_a_composite_type_of(java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_field_that_has_dictionary_type_named(java.lang.String)160.0000.0000.011100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_field_that_has_dictionary_type_named_and_a_drift_policy_of(java.lang.String,java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_field_that_has_dictionary_type_named_and_a_ethics_policy_of(java.lang.String,java.lang.String)20.0000.0000.001100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_a_field_that_has_dictionary_type_named_and_a_protection_policy_of(java.lang.String,java.lang.String)20.0010.0020.002100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_record_with_the_fields_named(java.util.List<java.lang.String>)30.0030.0080.010100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_valid_record_is_available_can_be_looked_up_by_the_name_and(java.lang.String,java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_valid_record_is_available_with_a_description_of(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_valid_record_is_available_with_fields_named(java.util.List<java.lang.String>)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_valid_record_with_data_access_configuration()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.a_valid_record_with_data_access_disabled()10.0010.0010.001100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.recordsAreReadForAPythonProject()20.0020.0030.005100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.records_are_read()410.0050.0170.214100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper()430.0050.0180.215100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.theRecordIsAvailableAndHasPysparkSupportDisabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.theRecordIsAvailableAndHasPysparkSupportEnabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_following_dictionary_types(java.util.List<com.boozallen.aiops.mda.metamodel.element.DictionaryTypeElement>)790.0010.0180.113100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_has_a_description_of(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_has_a_drift_policy_of(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_has_a_ethics_policy_of(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_has_a_field_with_a_composite_type_of_containing_multiple_fields(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_has_a_no_drift_policy_specified()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_has_a_no_ethics_policy_specified()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_has_a_no_protection_policy_specified()20.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_has_a_protection_policy_of(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_marked_as_optional()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_and_marked_as_required()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_with_a_column_name_of(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_field_is_available_with_a_simple_type_of(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_is_available_and_has_data_access_disabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.metamodel.element.RecordSteps.the_record_is_available_and_has_data_access_enabled()10.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.LineageTest.a_pipeline_run_is_created()10.0010.0010.001100.00%
com.boozallen.aiops.mda.pattern.LineageTest.setUp()10.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.LineageTest.step_lineage_run_event_is_created()10.0040.0040.004100.00%
com.boozallen.aiops.mda.pattern.LineageTest.tearDown()10.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.LineageTest.the_pipeline_has_the_step_name_ingest()10.0030.0030.003100.00%
com.boozallen.aiops.mda.pattern.LineageTest.the_step_lineage_run_event_parent_run_is_the_pipeline_run()10.1210.1210.121100.00%
com.boozallen.aiops.mda.pattern.PipelineSteps.a_postcondition_results()10.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.PipelineSteps.a_precondition()10.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.PipelineSteps.an_action_occurs()10.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.PipelineSteps.setUp()10.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.PipelineSteps.tearDown()10.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.RecordTest.a_string_for_a_required_field(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.RecordTest.a_string_for_a_validated_field(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.RecordTest.i_should_fail_validation(java.lang.Boolean)70.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.RecordTest.i_update_a_field_that_requires_a_minimum_length_of()40.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.RecordTest.i_update_a_required_field()30.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.RecordTest.setUpRequired()30.0000.0000.000100.00%
com.boozallen.aiops.mda.pattern.RecordTest.setUpValidation()40.0110.0450.045100.00%
com.boozallen.aiops.metadata.PipelineSteps.a_populated_metadata_table()14.3064.3064.306100.00%
com.boozallen.aiops.metadata.PipelineSteps.return_a_200_code()10.0000.0000.000100.00%
com.boozallen.aiops.metadata.PipelineSteps.setUp()10.0020.0020.002100.00%
com.boozallen.aiops.metadata.PipelineSteps.tearDown()10.0000.0000.000100.00%
com.boozallen.aiops.metadata.PipelineSteps.the_getMetadata_endpoint_is_called()10.4440.4440.444100.00%
com.boozallen.aissemble.alerting.core.AlertingSteps.an_alert_is_published_to_the_topic()10.0170.0170.017100.00%
com.boozallen.aissemble.alerting.core.AlertingSteps.i_am_subscribed_to_the_alert_topic()10.0000.0000.000100.00%
com.boozallen.aissemble.alerting.core.AlertingSteps.i_can_see_the_details_of_the_alert()10.0000.0000.000100.00%
com.boozallen.aissemble.alerting.core.AlertingSteps.setUp()10.4800.4800.480100.00%
com.boozallen.aissemble.alerting.core.AlertingSteps.tearDown()10.0020.0020.002100.00%
com.boozallen.aissemble.alerting.slack.SlackAlertingSteps.an_alert_is_sent_to_slack()10.7770.7770.777100.00%
com.boozallen.aissemble.alerting.slack.SlackAlertingSteps.setUp()10.4250.4250.425100.00%
com.boozallen.aissemble.alerting.slack.SlackAlertingSteps.tearDown()10.0020.0020.002100.00%
com.boozallen.aissemble.alerting.slack.SlackAlertingSteps.the_alert_is_sent_to_the_configured_slack_channel_successfully()10.0010.0010.001100.00%
com.boozallen.aissemble.configuration.mutating.webhook.MutatingWebhookSteps.aConfigMapDefinitionThatContainsTheSubstituionKeyExists()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.mutating.webhook.MutatingWebhookSteps.aKubernetesResourceRequestIsMade()10.1430.1430.143100.00%
com.boozallen.aissemble.configuration.mutating.webhook.MutatingWebhookSteps.theConfigMapDefinitionContainsTheInjectedValue()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.mutating.webhook.MutatingWebhookSteps.theConfigMapDefinitionHasTheInjectionMetatdataLabel()10.0030.0030.003100.00%
com.boozallen.aissemble.configuration.mutating.webhook.MutatingWebhookSteps.theProcessedKubernetesResourceIsReturned()10.0040.0040.004100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.URIPointingToPolicyUndefinedAttribute(java.lang.String)60.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.URIsPointingToPoliciesTargetingSameProperty()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.URIsPointingToValidBaseAndEnvironmentPolicies()30.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.URIsPointingToValidBaseAndEnvironmentProperties()30.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.anExceptionIsThrownStatingPolicyAttributeUndefined()60.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.anExceptionIsThrownStatingPropertyCannotBeTargetedMultiplePolicies()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.augmentsTheBaseWithTheEnvironmentConfigurations()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup()150.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.consumesTheBaseProperties()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.notifyOnPreviousConfigurationFullLoad()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.notifyOnSuccessConfigurationLoad()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.requestAConfigurationProperty()10.0090.0090.009100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup()150.0000.0000.001100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.successStatusIsRecorded()20.0080.0090.017100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theConfigLoaderConsumesTheBaseAndEnvironmentPolicies()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theConfigLoaderToConfiguredToUse(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theConfigLoaderValidatesTheURIAndItsContents()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theConfigurationServiceHasStarted()20.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theConfigurationServiceSkipLoading()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theConfigurationServiceStarts()20.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theConfigurationServiceStartsAgain()10.0120.0120.012100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theConfigurationsAreLoadedIntoConfigStore()10.3420.3420.342100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theConfigurationsAreWritten()20.0020.0050.005100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theEnvironmentPolicyOverridesTheBasePolicy()10.0000.0000.000100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.theLoadedPropertiesContainsTheDecryptedValue()10.0070.0070.007100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.thePoliciesAreLoaded()80.0080.0490.069100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.thePropertiesAreLoaded()30.0140.0210.043100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.thePropertiesCanBeRead()20.0000.0000.001100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.thePropertyValueIsReturned()10.0120.0120.012100.00%
com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.thereExistsAKrausening_passwordAndEncryptedProperties()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.a_policy_exists_with_the_following_targets(java.util.List<com.boozallen.aissemble.core.policy.configuration.policy.Target>)10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.a_policy_has_been_configured_with_rule(java.lang.Integer)40.0200.0810.082100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.a_policy_has_been_configured_with_targets(java.lang.Integer)30.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.a_policy_has_been_configured_with_the_deprecated_target_attribute()10.0010.0010.001100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.a_policy_has_no_valid_rules()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.a_policy_rule_specifies_the_target_configurations(java.util.Map<java.lang.String, java.lang.Object>)10.0010.0010.001100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.a_policy_rule_that_uses_the_class_with_the_following_configurations(java.lang.String,java.util.Map<java.lang.String, java.lang.Object>)10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.a_rule_within_a_policy_has_been_configured_without_a_class_name()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.a_valid_policy_exists()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_configurations_are_available_to_the_class()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_configured_targets_are_available_to_the_rule()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_policy_has_corresponding_rules(int)40.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_policy_has_corresponding_targets(int)40.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_policy_is_ignored()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_policy_is_read_in()120.0000.0020.003100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_policy_rule_is_read_in()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_policy_specifies_a_target(java.util.List<com.boozallen.aissemble.core.policy.configuration.policy.Target>)10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_rule_is_ignored()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_target_s_retrieve_url_is_set_as(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ConfigurePoliciesSteps.the_target_type_is_set_as(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.a_json_file_with_a_policy_with_multiple_rules()10.0250.0250.025100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.a_json_file_with_multiple_policies()10.0010.0010.001100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.a_policy_has_been_configured_without_an_identifier()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.all_the_policies_from_the_file_are_available_for_service_invocation()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.all_the_policies_from_the_multiple_json_files_are_available_for_service_invocation()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.multiple_json_files_exist_each_with_a_configured_policy()10.0040.0040.004100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.the_policies_are_loaded_from_the_file()10.0030.0030.003100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.the_policies_are_loaded_from_the_files()10.0030.0030.003100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.the_policy_is_available_for_service_invocation()10.0000.0000.000100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.the_policy_is_loaded_from_the_file()20.0100.0190.020100.00%
com.boozallen.aissemble.core.policy.configuration.policymanager.ReadPoliciesSteps.the_policy_is_not_added()10.0000.0000.000100.00%
com.boozallen.aissemble.data.encryption.EncryptionPolicySteps.a_json_file_with_a_policy_that_contains_a_list_of_encrypt_fields()10.2390.2390.239100.00%
com.boozallen.aissemble.data.encryption.EncryptionPolicySteps.a_json_file_with_a_policy_that_specifies_an_algorithm()10.0000.0000.000100.00%
com.boozallen.aissemble.data.encryption.EncryptionPolicySteps.the_policy_is_available_for_field_encryption()10.0000.0000.000100.00%
com.boozallen.aissemble.data.encryption.EncryptionPolicySteps.the_policy_is_available_with_the_algorithm()10.0000.0000.000100.00%
com.boozallen.aissemble.data.encryption.EncryptionPolicySteps.the_policy_is_loaded_from_the_file()20.0010.0020.002100.00%
com.boozallen.aissemble.data.encryption.HashingSteps.a_data_element_is_provided()20.0160.0320.032100.00%
com.boozallen.aissemble.data.encryption.HashingSteps.a_hash_is_generated()10.0000.0000.000100.00%
com.boozallen.aissemble.data.encryption.HashingSteps.decrypting_it_will_return_the_original_value()10.0000.0000.000100.00%
com.boozallen.aissemble.data.encryption.HashingSteps.tearDown()20.0000.0000.000100.00%
com.boozallen.aissemble.data.encryption.HashingSteps.the_data_element_is_encrypted()10.0230.0230.023100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_job_named(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_job_named_has_a_default_namespace(java.lang.String,java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_dataset_facet_object()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_input_dataset_object_named(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_input_dataset_object_with_a_defined_input_facet()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_job_facet_object()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_job_object()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_job_object_named(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_dataset_facet_will_be_created_with_its_fields_populated()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_input_dataset_will_be_created_with_its_fields_populated()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_input_dataset_will_be_created_with_its_fields_populated_including_the_input_facet()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_job_facet_will_be_created_with_its_fields_populated()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_job_will_be_created_with_its_fields_populated()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_output_dataset_will_be_created_with_its_fields_populated()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_output_dataset_will_be_created_with_its_fields_populated_including_an_output_facet()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_run_event_will_be_created_with_its_fields_populated()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_run_facet_will_be_created_with_its_fields_populated()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_open_lineage_run_will_be_created_with_its_fields_populated()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_output_dataset_object()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_output_dataset_object_with_a_defined_output_facet()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_run_event_object()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_run_facet_object()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.a_valid_run_object()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.an_exception_is_raised()20.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.i_have_configured_the_property_with_the_value(java.lang.String,java.lang.String)40.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_facet_s_function_to_build_an_open_lineage_dataset_facet_is_called()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_facet_s_function_to_build_an_open_lineage_job_facet_is_called()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_facet_s_function_to_build_an_open_lineage_run_facet_is_called()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_input_dataset_is_translated_to_an_openlineage_dataset()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_input_dataset_s_function_to_build_an_open_lineage_object_is_called()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_input_dataset_s_function_to_build_an_open_lineage_object_is_called_with_an_input_facet()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_job_is_translated_to_an_openlineage_job()20.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_job_namespace_value_is_set_to(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_job_namespace_value_of_the_event_is_set_to(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_job_s_function_to_build_an_open_lineage_object_is_called()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_namespace_value_of_the_dataset_is_set_to(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_output_dataset_s_function_to_build_an_open_lineage_object_is_called()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_output_dataset_s_function_to_build_an_open_lineage_object_is_called_with_a_defined_output_facet()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_producer_value_of_the_event_is_set_to(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_property_is_not_set(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_run_event_is_converted_to_the_open_lineage_format()40.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.BuildOpenLineageSteps.the_run_s_function_to_build_an_open_lineage_object_is_called()10.0010.0010.001100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.a_run_event()30.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cdi_container_is_created_with_automatic_context()20.0430.0450.087100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi()50.0010.0030.006100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.configuration_opts_into_console_emission()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.configuration_opts_out_of_console_emission()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.consoleTransportIsAvailable()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.consoleTransportIsNotAvailable()10.0020.0020.002100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.console_transport_added_to_cdi()10.0610.0610.061100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.noConsole()20.2170.3900.435100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset()220.0070.1640.165100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup()50.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.the_event_is_emitted_via_messaging()30.0320.0930.096100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.the_event_is_not_received_for_logging()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.the_event_is_received_for_logging()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.the_event_is_sent_on_the_outbound_channel()10.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.exception_occurs_during_processing()20.0260.0510.052100.00%
com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.failure_strategy_configured_to(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.message_process_successfully()20.0000.0010.001100.00%
com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context()40.0510.2060.207100.00%
com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection()40.0000.0010.001100.00%
com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_exceptional_handler()20.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_successful_handler()20.0000.0000.000100.00%
com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.verify_ack_type(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.iAmCreatingAProjectFromFoundationArchetype()60.0190.1160.117100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.tearDown()60.0010.0080.011100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.theArtifactIdIs(java.lang.String)60.0000.0000.000100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.theGroupIdIs(java.lang.String)60.0000.0000.000100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.thePackageIs(java.lang.String)120.0000.0000.000100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.theProjectCreationFailsForInvalidPackageName()50.0000.0000.000100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.theProjectCreationSucceedsForInvalidPackageName()10.0000.0000.000100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.theProjectGitUrlIs(java.lang.String)60.0000.0000.000100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.theProjectIsCreatedFromFoundationArchetype()60.0750.3010.451100.00%
com.boozallen.aissemble.foundation.PostGenerateSteps.theVersionIs(java.lang.String)60.0000.0000.000100.00%
com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.a_helm_version(java.lang.String)60.0000.0030.003100.00%
com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup()60.0000.0000.000100.00%
com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp()60.0320.1930.194100.00%
com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.the_required_helm_version_is(java.lang.String)60.0000.0000.000100.00%
com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.the_version_is_flagged()30.0020.0060.007100.00%
com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.the_version_is_not_flagged()30.0000.0000.001100.00%
com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.i_registered_a_in_the_cdi_configuration(java.lang.String)20.0760.1520.153100.00%
com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.i_registered_a_list_of_classes_in_the_cdi_configuration(java.util.List<java.lang.String>)10.0010.0010.001100.00%
com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.tearDown()30.0010.0020.004100.00%
com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.the_can_be_found_in_the_cdi_container(java.lang.String)20.0030.0060.007100.00%
com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.the_classes_can_be_found_in_the_cdi_container()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.the_container_is_initialized()30.0850.2090.255100.00%
com.boozallen.aissemble.messaging.python.ConfigurationSteps.cleanupMessaging()40.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ConfigurationSteps.i_have_configured_the_messaging_library_to_connect_to(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ConfigurationSteps.i_have_configured_the_messaging_library_to_connect_to_topics(java.lang.Integer)20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ConfigurationSteps.setup()40.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ConfigurationSteps.the_messaging_service_starts()40.1880.7540.754100.00%
com.boozallen.aissemble.messaging.python.ConfigurationSteps.the_service_creates_a_new_emitter_for(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ConfigurationSteps.the_service_creates_a_new_listener_for(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ConfigurationSteps.the_service_creates_an_emitter_for_each_topic()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ConfigurationSteps.the_service_creates_an_listener_for_each_topic()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.a_message_is_received_for_the_topic()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.a_message_is_sent_to_the_topic()20.0030.0060.006100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.an_ack_is_sent_to_broker()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.an_nack_is_sent_to_broker()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup()50.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement()30.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.consumer_failed_to_process_message()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.consumer_subscribe_to_a_topic_named(java.lang.String)50.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.resetConnector()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup()50.0000.0000.001100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setupNackMessageTest()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.the_ack_or_nack_is_sent_to_the_broker(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.the_consumer_ack_or_nack_the_message(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.the_message_is_processed_successfully_by_the_consumer()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.the_service_does_not_ack_or_nack_the_msg()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.the_subscription_is_configured_with_manual_ack_strategy()30.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SendMessageSteps.aMessageIsSentToToTheTopic(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SendMessageSteps.a_message_is_queued_to(java.lang.String)20.0000.0010.001100.00%
com.boozallen.aissemble.messaging.python.SendMessageSteps.a_messaging_topic_named(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SendMessageSteps.anExceptionIsThrownSayingTheTopicWasNotFound()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SendMessageSteps.cleanupMessaging()20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SendMessageSteps.setup()20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SubscribeSteps.a_messaging_topic(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SubscribeSteps.a_valid_callback_and_ack_strategy()20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SubscribeSteps.an_exception_is_thrown_saying_the_topic_does_not_exist()10.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SubscribeSteps.cleanupMessaging()20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SubscribeSteps.setup()20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SubscribeSteps.the_service_creates_a_subscription_to(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aissemble.messaging.python.SubscribeSteps.the_service_is_subscribed_to(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.security.authorization.AttributeSteps.an_attribute_with_aissemble_type(java.lang.String)80.0000.0020.002100.00%
com.boozallen.aissemble.security.authorization.AttributeSteps.setUp()800.0000.0000.003100.00%
com.boozallen.aissemble.security.authorization.AttributeSteps.the_attribute_is_read()80.0000.0050.005100.00%
com.boozallen.aissemble.security.authorization.AttributeSteps.the_fully_qualified_type_is_returned(java.lang.String)80.0000.0000.001100.00%
com.boozallen.aissemble.security.authorization.AuthorizationSteps.a_decision_is_returned(java.lang.String)660.0000.0000.002100.00%
com.boozallen.aissemble.security.authorization.AuthorizationSteps.a_policy_decision_is_requested()660.0000.0040.018100.00%
com.boozallen.aissemble.security.authorization.AuthorizationSteps.a_resource_action_and_subject(java.lang.String,java.lang.String)620.0110.6950.698100.00%
com.boozallen.aissemble.security.authorization.AuthorizationSteps.a_resource_and_subject(java.lang.String,java.lang.String)40.0000.0000.000100.00%
com.boozallen.aissemble.security.authorization.TokenSteps.a_claim_is_returned_with_the_attributes(java.lang.String)30.0050.0100.016100.00%
com.boozallen.aissemble.security.authorization.TokenSteps.a_claim_is_returned_with_the_following_rule_and_decision_pairings(java.util.List<com.boozallen.aissemble.security.authorization.TokenDataInput>)10.0100.0100.010100.00%
com.boozallen.aissemble.security.authorization.TokenSteps.a_token_is_requested_for_and(java.lang.String,java.lang.String)30.0190.0390.057100.00%
com.boozallen.aissemble.security.authorization.TokenSteps.a_token_is_requested_for_and_and_the_following_claims(java.util.List<com.boozallen.aissemble.security.authorization.policy.PolicyRequest>)10.0110.0110.011100.00%
com.boozallen.aissemble.security.authorization.TokenSteps.a_token_is_requested_for_with_an_attribute_value_claim_for_seasons_batting_over(java.lang.String,java.lang.Double)30.0060.0100.020100.00%
com.boozallen.aissemble.security.authorization.TokenSteps.tearDown()60.0000.0000.000100.00%
com.boozallen.aissemble.security.authorization.TokenSteps.the_token_contains_claims_for_and(java.lang.String,java.lang.String,java.lang.String)20.0120.0150.024100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.aHelmChartWithAnAiSSEMBLEDependency()40.0000.0000.001100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.aHelmChartWithNoAiSSEMBLEDependencies()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.aV1Chart(java.util.List<java.lang.String>)60.0000.0030.005100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theChartFileAiSSEMBLEUpgradeIsSkipped()50.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theDependencyIsOnAVersionEqualToTheCurrentVersionOfAiSSEMBLE()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theDependencyIsOnAVersionGreaterThanTheCurrentVersionOfAiSSEMBLE()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theDependencyIsOnAVersionLessThanTheCurrentSnapshotVersionOfAiSSEMBLE()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theDependencyIsOnAVersionLessThanTheCurrentVersionOfAiSSEMBLE()20.0010.0020.002100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theHelmChartMigrationExecutes()50.0030.0100.015100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theImageTagInTheValuesFileIsEqualToTheCurrentVersionOfAiSSEMBLE()10.0010.0010.001100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theImageTagInTheValuesFileIsGreaterThanTheCurrentVersionOfAiSSEMBLE()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theImageTagInTheValuesFileIsLessThanTheCurrentVersionOfAiSSEMBLE()40.0040.0130.016100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theV1HelmChartMigrationExecutes()60.0010.0050.011100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theValuesFileContainsMorePropertiesAfterTheImageTag()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theValuesFileDoesNotContainAHostname()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theValuesFileDoesNotContainAHostnameOrImageName()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theVersionOfTheChartIsUpdatedToTheCurrentVersionInTheValuesConfiguration()40.0020.0070.009100.00%
com.boozallen.aissemble.upgrade.migration.ChartMigrationSteps.theVersionOfTheDependencyIsUpdatedToTheCurrentVersion()20.0010.0020.002100.00%
com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.a_pyproject_toml_file_with_all_old_ai_ssemble_python_dependencies()10.0160.0160.016100.00%
com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.a_pyproject_toml_file_with_new_ai_ssemble_python_dependencies()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.a_pyproject_toml_file_with_old_ai_ssemble_python_dependencies()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile()570.0020.1310.134100.00%
com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.the_dependencies_are_updated_to_the_newest_naming_convention()20.0000.0000.001100.00%
com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.the_migration_is_skipped()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.the_pyproject_toml_file_migration_is_executed()30.0030.0080.011100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.anExistingTiltfileWithVERSION_AISSEMBLEIsAnOlderSNAPSHOTVersionThanTheProjectAiSSEMBLEVersion()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.anExistingTiltfileWithVERSION_AISSEMBLEIsEqualToTheProjectVersion()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.anExistingTiltfileWithVERSION_AISSEMBLEIsGreaterThanTheProjectAiSSEMBLEVersionInXXxXxFormat()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.anExistingTiltfileWithVERSION_AISSEMBLEIsGreaterThanTheProjectVersion()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.anExistingTiltfileWithVERSION_AISSEMBLEIsLessThanTheProjectAiSSEMBLEVersion()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.anExistingTiltfileWithVERSION_AISSEMBLEIsLessThanTheProjectAiSSEMBLEVersionInXXxXxFormat()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.anExistingTiltfileWithVERSION_AISSEMBLESNAPSHOTIsGreaterThanTheProjectVersion()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.theTiltfileVersionMigrationExecutes()70.0020.0040.015100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.theVERSION_AISSEMBLEIsUpdatedToTheProjectVersion()20.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.theVERSION_AISSEMBLEIsUpdatedToTheSpecifiedVersionValueFromTheBatonSpecificationsInTheTiltfile()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.TiltMigrationSteps.theVERSION_AISSEMBLEShouldNotBeMigrated()40.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.aYamlFile(java.lang.String)20.0000.0010.001100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.theBooleanValueOfThePropertyIs(java.lang.String,java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.theDecimalValueOfThePropertyIs(java.lang.String,double)10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.theDecimalValueOfThePropertyOfTheObjectIs(java.lang.String,java.lang.String,double)10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.theFileIsLoaded()20.0000.0010.001100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.theIntegerValueOfItemOfTheListIs(java.lang.String,int,java.lang.String,int)10.0010.0010.001100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.theIntegerValueOfThePropertyIs(java.lang.String,int)10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.thePropertyIsAnObject(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.theSizeOfTheListIs(java.lang.String,int)20.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.utils.YamlUtilsSteps.theStringValueOfThePropertyIs(java.lang.String,java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.DeltaSparkMigration.aPOMThatReferencesTheDeltaCorePackage()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.DeltaSparkMigration.aPOMThatReferencesTheDeltaCorePackageThatDoesNotHaveDependencyManagement()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.DeltaSparkMigration.aSparkApplicationFileThatReferencesDeltaCoreDeltaStorageInSpecDepsJars()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.DeltaSparkMigration.aSparkApplicationValuesFileThatReferencesDeltaCoreDeltaStorageInSparkAppSpecDepsJars()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.DeltaSparkMigration.deltaCoreIsUpdatedToDeltaSparkAndTheVersionIsSetToTheVersionDeltaProperty()20.0000.0010.001100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.DeltaSparkMigration.theDeltaLakeJarCoordinatesAreUpdatedTo()20.0010.0010.002100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.DeltaSparkMigration.theDeltaSparkPOMMigrationExecutes()20.0070.0120.014100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.DeltaSparkMigration.theDeltaSparkYamlMigrationExecutes()20.0040.0060.009100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.ItInfrastructureJavaUpgradeMigrationSteps.aProjectThatIsUsingTheJavaDockerImage()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.ItInfrastructureJavaUpgradeMigrationSteps.aProjectWithOutdatedJavaDockerImage()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.ItInfrastructureJavaUpgradeMigrationSteps.theDockerImageBeingUsedIsJDK()10.0010.0010.001100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.ItInfrastructureJavaUpgradeMigrationSteps.theDockerImageIsNotUpdated()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.ItInfrastructureJavaUpgradeMigrationSteps.theItInfrastructureMigrationExecutes()20.0010.0010.002100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.JavaPackageMigrationSteps.a_java_file_with_the_mew_java_package_names()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.JavaPackageMigrationSteps.a_java_file_with_the_outdated_java_package_names()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.JavaPackageMigrationSteps.the_java_file_is_updated_to_use_the_new_java_package_names()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.JavaPackageMigrationSteps.the_java_package_migration_executes()20.0010.0020.002100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.JavaPackageMigrationSteps.the_java_package_migration_is_skipped()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.Log4jMavenShadePluginMigrationSteps.a_Maven_Shade_Plugin_instance_without_a_Log4j_dependency()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.Log4jMavenShadePluginMigrationSteps.a_maven_shade_plugin_instance_with_an_outdated_dependency_on_log4j()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.Log4jMavenShadePluginMigrationSteps.the_Log4j_Maven_Shade_Plugin_migration_is_skipped()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.Log4jMavenShadePluginMigrationSteps.the_log4j_maven_shade_plugin_migration_executes()20.0030.0050.006100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.Log4jMavenShadePluginMigrationSteps.the_maven_shade_plugin_is_updated_to_use_the_new_log4j_dependency()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.Log4jMavenShadePluginMigrationSteps.the_transformer_configuration_is_updated_with_the_new_implementation()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.PomDependencyVersionMigrationSteps.a_pom_that_does_not_contain_any_dependencies_previously_managed_by_the_aissemble_bom()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.PomDependencyVersionMigrationSteps.a_pom_that_references_dependencies_previously_managed_by_the_aissemble_bom()30.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.PomDependencyVersionMigrationSteps.the_dependencies_are_all_using_the_updated_version()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.PomDependencyVersionMigrationSteps.the_dependencies_are_updated_to_use_the_necessary_version()20.0000.0000.001100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.PomDependencyVersionMigrationSteps.the_pom_dependency_version_migration_executes()40.0020.0040.009100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.PomDependencyVersionMigrationSteps.the_pom_dependency_version_migration_is_skipped()20.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.PomDependencyVersionMigrationSteps.the_pom_has_the_dependencies_in_profiles_and_dependency_management()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.QuarkusBomMigrationSteps.a_pom_that_does_not_contain_a_quarkus_bom()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.QuarkusBomMigrationSteps.a_pom_that_references_the_quarkus_bom(java.lang.String)20.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.QuarkusBomMigrationSteps.the_quarkus_bom_is_updated_to_the_aissemble_quarkus_bom()20.0000.0000.001100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.QuarkusBomMigrationSteps.the_quarkus_bom_migration_executes()30.0030.0050.010100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.QuarkusBomMigrationSteps.the_quarkus_bom_migration_is_skipped()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingCdiFactoryMigrationSteps.a_maven_project_dependency(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingCdiFactoryMigrationSteps.a_maven_project_with_the_packaging_type(java.lang.String)10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingCdiFactoryMigrationSteps.no_maven_project_smallrye_dependencies()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingCdiFactoryMigrationSteps.the_CDI_container_factory_is_updated_with_the_messaging_and_kafka_context_objects()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingCdiFactoryMigrationSteps.the_CDI_container_factory_is_updated_with_the_messaging_context_object()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingCdiFactoryMigrationSteps.the_pipeline_module_has_already_been_migrated()20.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingCdiFactoryMigrationSteps.the_spark_pipeline_messaging_migration_executes()60.0010.0030.007100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingCdiFactoryMigrationSteps.the_spark_pipeline_messaging_migration_is_skipped()40.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingPomMigrationSteps.a_dependency(java.lang.String)40.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingPomMigrationSteps.a_pom_with_the_packaging_type(java.lang.String)110.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingPomMigrationSteps.no_smallrye_dependencies()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingPomMigrationSteps.the_aissemble_kafka_messaging_dependency_is_added_to_the_pom()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingPomMigrationSteps.the_pipeline_module_pom_has_already_been_migrated()20.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingPomMigrationSteps.the_spark_pipeline_messaging_pom_migration_executes()60.0010.0060.010100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineMessagingPomMigrationSteps.the_spark_pipeline_messaging_pom_migration_is_skipped()50.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineServletApiMigrationSteps.a_pom_with_packaging_type(java.lang.String)30.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineServletApiMigrationSteps.the_javax_servlet_api_dependency_is_added_to_the_pom()10.0010.0010.001100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineServletApiMigrationSteps.the_pom_already_contains_the_javax_servlet_api_dependency()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineServletApiMigrationSteps.the_pom_does_not_contain_the_javax_servlet_api_dependency()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineServletApiMigrationSteps.the_spark_pipeline_servlet_api_migration_executes()30.0030.0070.009100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkPipelineServletApiMigrationSteps.the_spark_pipeline_servlet_api_migration_is_skipped()20.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkVersionUpgradeMigrationSteps.aProjectWithOutdatedSparkApplicationConfiguration()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkVersionUpgradeMigrationSteps.aProjectWithUpToDateSparkApplicationConfiguration()10.0000.0000.000100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkVersionUpgradeMigrationSteps.theSparkApplicationConfigsAreNotUpdated()10.0010.0010.001100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkVersionUpgradeMigrationSteps.theSparkApplicationConfigsAreUpdated()10.0010.0010.001100.00%
com.boozallen.aissemble.upgrade.migration.v1_10_0.SparkVersionUpgradeMigrationSteps.theSparkVersionUpgradeMigrationExecutes()20.0010.0010.002100.00%
com.boozallen.data.transform.DataTransformSteps.a_data_transform_policy_has_been_configured()10.0460.0460.046100.00%
com.boozallen.data.transform.DataTransformSteps.setUp()10.0000.0000.000100.00%
com.boozallen.data.transform.DataTransformSteps.tearDown()10.0000.0000.000100.00%
com.boozallen.data.transform.DataTransformSteps.the_dataset_is_transformed_using_the_rule_specified_in_the_policy()10.0010.0010.001100.00%
com.boozallen.data.transform.DataTransformSteps.the_policy_is_applied_on_a_dataset()11.3551.3551.355100.00%
com.boozallen.drift.detection.CommonCdiSteps.setUp()220.0400.3480.883100.00%
com.boozallen.drift.detection.CommonCdiSteps.tearDown()220.0000.0020.013100.00%
com.boozallen.drift.detection.DetectDrift.a_policy_has_been_configured_with_a_single_rule()40.0020.0020.008100.00%
com.boozallen.drift.detection.DetectDrift.drift_detection_is_invoked_specifying_the_policy_a_list_of_inputs_and_control_data()10.0010.0010.001100.00%
com.boozallen.drift.detection.DetectDrift.drift_detection_is_invoked_specifying_the_policy_a_single_input_and_control_data()10.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDrift.drift_detection_is_invoked_specifying_the_policy_and_a_list_of_inputs()10.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDrift.drift_detection_is_invoked_specifying_the_policy_and_a_single_input()10.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDrift.drift_detection_is_run_on_the_list_of_inputs_using_the_policy_specified()20.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDrift.drift_detection_is_run_on_the_single_input_using_the_policy_specified()20.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDrift.the_control_data_is_used_to_set_the_metrics_for_the_algorithm()20.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDriftUsingStandardDeviationSteps.a_policy_with_a_single_rule_configured_to_use_the_standard_score_algorithm()70.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDriftUsingStandardDeviationSteps.drift_detected_is(java.lang.String)60.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDriftUsingStandardDeviationSteps.drift_detection_is_invoked_on_using_the_policy(java.lang.String)60.0030.0050.021100.00%
com.boozallen.drift.detection.DetectDriftUsingStandardDeviationSteps.drift_is_detected_on_a_input()10.0030.0030.003100.00%
com.boozallen.drift.detection.DetectDriftUsingStandardDeviationSteps.input_whose_values_fall_outside_the_upper_bound_of_and_lower_bound_will_be_flagged_for_drift(java.lang.Integer,java.lang.Integer)60.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDriftUsingStandardDeviationSteps.the_algorithm_has_a_configured_mean_of_standard_deviation_of_and_z_score_of(java.lang.Integer,java.lang.Integer,java.lang.Integer)60.0000.0000.000100.00%
com.boozallen.drift.detection.DetectDriftUsingStandardDeviationSteps.the_flagged_value_will_be_included_in_the_result()10.0000.0000.000100.00%
com.boozallen.drift.detection.SendAlerts.a_policy_has_been_configured_to_never_send_alerts()20.0010.0020.003100.00%
com.boozallen.drift.detection.SendAlerts.a_policy_has_been_configured_to_only_send_alerts_when_drift_is_detected()20.0020.0030.004100.00%
com.boozallen.drift.detection.SendAlerts.a_policy_has_been_defined_with_no_alert_configuration()20.0020.0030.005100.00%
com.boozallen.drift.detection.SendAlerts.an_alert_is_not_sent()20.0000.0000.000100.00%
com.boozallen.drift.detection.SendAlerts.an_alert_is_sent()10.0000.0000.000100.00%
com.boozallen.drift.detection.SendAlerts.an_alert_is_set_that(java.lang.String)20.0000.0000.000100.00%
com.boozallen.drift.detection.SendAlerts.an_alert_sent(java.lang.String)20.0000.0000.000100.00%
com.boozallen.drift.detection.SendAlerts.the_alert_is_published_to_an_topic(java.lang.String)10.0000.0000.000100.00%
com.boozallen.drift.detection.SendAlerts.using_the_policy_specified(java.lang.String)60.0000.0010.002100.00%
com.boozallen.drift.detection.algorithm.CalculateBoundsSteps.a_mean_of_a_standard_deviation_of_and_a_z_score(java.lang.Double,java.lang.Double,java.lang.Double)40.0000.0000.000100.00%
com.boozallen.drift.detection.algorithm.CalculateBoundsSteps.the_bounds_for_drift_detection_are_calculated()40.0000.0000.000100.00%
com.boozallen.drift.detection.algorithm.CalculateBoundsSteps.the_lower_bound_is_determined_to_be(java.lang.Double)40.0000.0000.000100.00%
com.boozallen.drift.detection.algorithm.CalculateBoundsSteps.the_upper_bound_is_determined_to_be(java.lang.Double)40.0000.0000.000100.00%
com.boozallen.drift.detection.algorithm.CalculateConfigurationsFromControlSteps.a_calculated_mean_of(java.lang.Double)30.0000.0000.000100.00%
com.boozallen.drift.detection.algorithm.CalculateConfigurationsFromControlSteps.a_calculated_number_is_rounded(java.lang.Double)30.0000.0000.000100.00%
com.boozallen.drift.detection.algorithm.CalculateConfigurationsFromControlSteps.a_set_of_control_data(java.lang.String)60.0240.1450.146100.00%
com.boozallen.drift.detection.algorithm.CalculateConfigurationsFromControlSteps.the_mean_is(java.lang.Double)30.0000.0000.000100.00%
com.boozallen.drift.detection.algorithm.CalculateConfigurationsFromControlSteps.the_mean_is_calculated()30.0010.0040.004100.00%
com.boozallen.drift.detection.algorithm.CalculateConfigurationsFromControlSteps.the_number_is_rounded_using_the_half_up_rounding_method_and_last_digits(java.lang.Double,java.lang.Integer)30.0000.0000.000100.00%
com.boozallen.drift.detection.algorithm.CalculateConfigurationsFromControlSteps.the_standard_deviation_is(java.lang.Double)30.0000.0000.000100.00%
com.boozallen.drift.detection.algorithm.CalculateConfigurationsFromControlSteps.the_standard_deviation_is_calculated()30.0000.0020.002100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.a_policy_with_one_rule_configured_to_use_the_standard_deviation_algorithm()30.0000.0010.001100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.drift_detection_is_invoked_using_control_data_and_the_policy()10.0040.0040.004100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.drift_detection_is_invoked_using_the_policy()20.0570.1110.114100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.the_rule_specifies_a_mean_and_standard_deviation()20.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.the_rule_specifies_a_z_score()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.the_standard_score_will_use_the_mean_and_standard_deviation_calculated_from_the_control_data()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.the_standard_score_will_use_the_specified_mean_and_standard_deviation()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.the_standard_score_will_use_the_z_score_configured_by_the_rule()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.the_z_score_is_not_configured_by_a_rule()10.0020.0020.002100.00%
com.boozallen.drift.detection.policy.ConfigureAlgorithmSteps.the_z_score_is_set_to_by_default(java.lang.Integer)10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.a_policy_has_been_configured_with_rule(java.lang.Integer)40.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.a_policy_rule_that_uses_an_algorithm_with_the_following_unrecognized_configurations(java.util.Map<java.lang.String, java.lang.Object>)10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.a_policy_rule_that_uses_the_algorithm_with_the_following_configurations(java.lang.String,java.util.Map<java.lang.String, java.lang.Object>)20.0000.0010.001100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.the_algorithm_from_is_used(java.lang.String)30.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.the_configurations_are_available_to_the_algorithm()20.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.the_configured_policies_reference_an_algorithm_by_class_name(java.lang.String)30.0000.0000.001100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.the_policy_has_corresponding_rules(int)40.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.the_policy_is_read_in()40.0000.0000.003100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.the_policy_rule_is_read_in()30.0000.0000.001100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.the_policy_rule_specifies_a_target_of(java.lang.String)10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.the_target_is_set_as(java.lang.String)10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ConfigurePoliciesSteps.the_unrecognized_configurations_are_ignored()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.a_json_file_with_a_policy_with_multiple_rules()10.0030.0030.003100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.a_json_file_with_multiple_policies()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.a_policy_has_been_configured_without_an_identifier()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.all_the_policies_from_the_file_are_available_for_drift_service_detection()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.all_the_policies_from_the_multiple_json_files_are_available_for_drift_service_detection()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.multiple_json_files_exist_each_with_a_configured_policy()10.0010.0010.001100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.the_policies_are_loaded_from_the_file()10.0020.0020.002100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.the_policies_are_loaded_from_the_files()10.0050.0050.005100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.the_policy_is_available_for_drift_service_detection()10.0000.0000.000100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.the_policy_is_loaded_from_the_file()20.0010.0020.003100.00%
com.boozallen.drift.detection.policy.ReadPoliciesSteps.the_policy_is_not_added()10.0000.0000.000100.00%
tests/features/steps/client_queue_steps.py:2010.1280.1280.128100.00%
tests/features/steps/client_queue_steps.py:2920.6780.6841.357100.00%
tests/features/steps/client_queue_steps.py:4110.0000.0000.000100.00%
tests/features/steps/client_queue_steps.py:4710.0000.0000.000100.00%
tests/features/steps/client_queue_steps.py:820.1380.1410.276100.00%
tests/features/steps/client_server_steps.py:1520.1410.1450.282100.00%
tests/features/steps/client_server_steps.py:3010.0000.0000.000100.00%
tests/features/steps/client_server_steps.py:3520.7680.7721.537100.00%
tests/features/steps/client_server_steps.py:4410.0000.0000.000100.00%
tests/features/steps/client_server_steps.py:5010.0000.0000.000100.00%
tests/features/steps/client_server_steps.py:5640.9120.9193.650100.00%
tests/features/steps/client_server_steps.py:6840.0040.0050.018100.00%
tests/features/steps/client_server_steps.py:7520.0090.0090.018100.00%
tests/features/steps/client_server_steps.py:8120.0000.0000.000100.00%
tests/features/steps/client_server_steps.py:8620.0110.0120.022100.00%
tests/features/steps/client_server_steps.py:9220.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:10410.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:117120.0000.0000.001100.00%
tests/features/steps/configure_rules_steps.py:12410.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:13140.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:13940.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:14810.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:15810.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:16710.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:17510.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:18410.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:20210.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:3540.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:4030.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:4610.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:5210.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:6210.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:6910.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:7410.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:8110.0000.0000.000100.00%
tests/features/steps/configure_rules_steps.py:9310.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:11110.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:11810.0010.0010.001100.00%
tests/features/steps/convert_to_openlineage_steps.py:12310.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:14710.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:15610.0010.0010.001100.00%
tests/features/steps/convert_to_openlineage_steps.py:16110.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:1810.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:18510.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:19710.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:20220.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:20740.0000.0000.001100.00%
tests/features/steps/convert_to_openlineage_steps.py:21210.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:2310.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:23430.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:24130.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:25420.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:26210.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:27030.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:27610.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:2810.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:28210.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:29820.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:3510.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:4110.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:4610.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:5520.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:6130.0000.0000.001100.00%
tests/features/steps/convert_to_openlineage_steps.py:6910.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:8320.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:8920.0000.0000.000100.00%
tests/features/steps/convert_to_openlineage_steps.py:9710.0000.0000.000100.00%
tests/features/steps/data_encryption_policy_steps.py:2610.0040.0040.004100.00%
tests/features/steps/data_encryption_policy_steps.py:5210.0000.0000.000100.00%
tests/features/steps/data_encryption_policy_steps.py:6510.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:10410.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:11530.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:12210.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:13510.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:14810.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:15410.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:15910.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:17010.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:17710.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:18810.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:19920.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:2110.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:3310.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:3910.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:4510.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:5610.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:6310.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:6910.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:7410.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:8510.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:910.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:9210.0000.0000.000100.00%
tests/features/steps/data_lineage_type_steps.py:9810.0000.0000.000100.00%
tests/features/steps/data_transform_steps.py:2410.0110.0110.011100.00%
tests/features/steps/data_transform_steps.py:4112.7552.7552.755100.00%
tests/features/steps/data_transform_steps.py:4910.0050.0050.005100.00%
tests/features/steps/encryption_steps.py:3910.0000.0000.000100.00%
tests/features/steps/encryption_steps.py:5810.0050.0050.005100.00%
tests/features/steps/encryption_steps.py:9410.0000.0000.000100.00%
tests/features/steps/inbound_outbound_types_steps.py:10210.0040.0040.004100.00%
tests/features/steps/inbound_outbound_types_steps.py:10920.0050.0050.010100.00%
tests/features/steps/inbound_outbound_types_steps.py:11610.0110.0110.011100.00%
tests/features/steps/inbound_outbound_types_steps.py:12120.0030.0030.007100.00%
tests/features/steps/inbound_outbound_types_steps.py:12610.0050.0050.005100.00%
tests/features/steps/inbound_outbound_types_steps.py:13310.0030.0030.003100.00%
tests/features/steps/inbound_outbound_types_steps.py:13820.0040.0050.009100.00%
tests/features/steps/inbound_outbound_types_steps.py:14510.0050.0050.005100.00%
tests/features/steps/inbound_outbound_types_steps.py:15210.0040.0040.004100.00%
tests/features/steps/inbound_outbound_types_steps.py:15920.0040.0050.009100.00%
tests/features/steps/inbound_outbound_types_steps.py:16640.0000.0000.000100.00%
tests/features/steps/inbound_outbound_types_steps.py:17220.0000.0000.000100.00%
tests/features/steps/inbound_outbound_types_steps.py:17840.0000.0000.000100.00%
tests/features/steps/inbound_outbound_types_steps.py:18440.0000.0000.000100.00%
tests/features/steps/inbound_outbound_types_steps.py:19040.0000.0010.003100.00%
tests/features/steps/inbound_outbound_types_steps.py:20640.0000.0000.000100.00%
tests/features/steps/inbound_outbound_types_steps.py:21360.0000.0010.005100.00%
tests/features/steps/inbound_outbound_types_steps.py:23760.0000.0000.000100.00%
tests/features/steps/inbound_outbound_types_steps.py:244110.0000.0000.000100.00%
tests/features/steps/inbound_outbound_types_steps.py:6820.0040.0050.009100.00%
tests/features/steps/inbound_outbound_types_steps.py:7320.0040.0040.008100.00%
tests/features/steps/inbound_outbound_types_steps.py:7810.0040.0040.004100.00%
tests/features/steps/inbound_outbound_types_steps.py:8520.0040.0040.009100.00%
tests/features/steps/inbound_outbound_types_steps.py:9020.0040.0040.008100.00%
tests/features/steps/inbound_outbound_types_steps.py:9510.0050.0050.005100.00%
tests/features/steps/inference_steps.py:1710.0000.0000.000100.00%
tests/features/steps/inference_steps.py:2110.0000.0000.000100.00%
tests/features/steps/mediation_steps.py:10310.0000.0000.000100.00%
tests/features/steps/mediation_steps.py:24100.0000.0000.000100.00%
tests/features/steps/mediation_steps.py:3810.0000.0000.000100.00%
tests/features/steps/mediation_steps.py:4510.0000.0000.000100.00%
tests/features/steps/mediation_steps.py:57100.0000.0000.001100.00%
tests/features/steps/mediation_steps.py:6660.0000.0000.000100.00%
tests/features/steps/mediation_steps.py:7320.0000.0000.000100.00%
tests/features/steps/mediation_steps.py:8020.0000.0000.000100.00%
tests/features/steps/mediation_steps.py:9250.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:10310.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:11810.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:13210.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:14410.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:16110.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:2110.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:2640.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:3210.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:3910.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:4610.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:5110.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:5910.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:6610.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:7310.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:8010.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:8710.0000.0000.000100.00%
tests/features/steps/model_lineage_steps.py:9410.0000.0000.000100.00%
tests/features/steps/model_training_api_steps.py:11110.0000.0000.000100.00%
tests/features/steps/model_training_api_steps.py:11910.0000.0000.000100.00%
tests/features/steps/model_training_api_steps.py:14310.0000.0000.000100.00%
tests/features/steps/model_training_api_steps.py:15210.0000.0000.000100.00%
tests/features/steps/model_training_api_steps.py:16710.0000.0000.000100.00%
tests/features/steps/model_training_api_steps.py:2640.3511.4021.405100.00%
tests/features/steps/model_training_api_steps.py:4710.0030.0030.003100.00%
tests/features/steps/model_training_api_steps.py:7410.0000.0000.000100.00%
tests/features/steps/model_training_api_steps.py:8310.0000.0000.000100.00%
tests/features/steps/pyspark_data_delivery_steps.py:1710.0000.0000.000100.00%
tests/features/steps/pyspark_data_delivery_steps.py:2110.0010.0010.001100.00%
tests/features/steps/pyspark_data_delivery_steps.py:2910.0000.0000.000100.00%
tests/features/steps/pyspark_data_delivery_steps.py:3410.0090.0090.009100.00%
tests/features/steps/pyspark_test_utils.py:1210.0060.0060.006100.00%
tests/features/steps/pyspark_test_utils.py:1920.1390.2760.278100.00%
tests/features/steps/pyspark_test_utils.py:713.0453.0453.045100.00%
tests/features/steps/pyspark_validation_steps.py:2580.0000.0000.000100.00%
tests/features/steps/pyspark_validation_steps.py:4380.0000.0000.000100.00%
tests/features/steps/pyspark_validation_steps.py:6380.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:10210.0020.0020.002100.00%
tests/features/steps/read_policies_steps.py:10710.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:11220.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:12110.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:13110.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:14010.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:14810.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:3110.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:4010.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:5110.0010.0010.001100.00%
tests/features/steps/read_policies_steps.py:6710.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:7910.0000.0000.000100.00%
tests/features/steps/read_policies_steps.py:9730.0000.0000.001100.00%
tests/features/steps/training_steps.py:1720.0000.0000.000100.00%
tests/features/steps/training_steps.py:2120.0000.0000.001100.00%
tests/features/steps/versioning_steps.py:2510.0000.0000.000100.00%
tests/features/steps/versioning_steps.py:4010.0000.0000.000100.00%
tests/features/steps/versioning_steps.py:6110.0000.0000.000100.00%
87829600.0124.30635.809Totals
+
+
+
+ + + + + + diff --git a/docs/overview-tags.html b/docs/overview-tags.html new file mode 100755 index 0000000..9282770 --- /dev/null +++ b/docs/overview-tags.html @@ -0,0 +1,1579 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tags Overview + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tags Statistics

+

The following graph shows passing and failing statistics for tags

+
+
+ + +
+
+
+ +
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@IntegrationTest300000308087.292Passed
@alerting250000259090.813Passed
@asynchronous38000038110110.062Passed
@attributes1170000117390390.725Passed
@authorization1050000105350350.003Passed
@buildOLClasses57000057170170.009Passed
@calculateBounds160000164040.000Passed
@calculateStandardDeviation27000027100100.155Passed
@cdi86000086280280.420Passed
@cdiConfiguration9000093030.418Passed
@chart-v2-migration200000205050.026Passed
@charts-v1210000216060.039Passed
@code-generation77000077160160.765Passed
@composite1080000108360360.280Passed
@config-loader56000056150150.522Passed
@config-service3000031010.022Passed
@config-store120000122020.372Passed
@config-webhook6000061010.151Passed
@configure120000124040.755Passed
@configureStandardDeviation140000145050.123Passed
@data-delivery200000205050.028Passed
@data-lineage4000041010.130Passed
@data-records-generation2580000258350351.609Passed
@dataEncryptionPolicy3000031010.005Passed
@dataTransform6000062024.176Passed
@dependencies3000031010.000Passed
@deployment-generation4000042020.029Passed
@detectAckType120000124040.054Passed
@detectDriftStandardScore260000267070.026Passed
@dictionary1050000105350350.166Passed
@docker120000123030.054Passed
@driftConfigurations29000029100100.008Passed
@emission160000165050.249Passed
@encryptPolicies6000062020.242Passed
@encryptfield6000062020.009Passed
@enforce-helm-version180000186060.013Passed
@exceptional6000062020.052Passed
@hashing5000052020.057Passed
@inbound69000069240240.128Passed
@inference2000021010.000Passed
@jwtToken130000136060.141Passed
@lineage_types26000026130130.001Passed
@manual-acknowledgement200000205051.856Passed
@messaging180000184040.023Passed
@metadata3000031014.751Passed
@modelTrainingAPI120000124041.410Passed
@model_lineage200000205050.001Passed
@module-generation2030000203250251.036Passed
@nack-message4000041010.000Passed
@nametranslation51000051140140.000Passed
@object-store-validation2000021010.005Passed
@outbound69000069240240.128Passed
@pipeline1300000130430430.200Passed
@pipeline-generation1320000132240241.340Passed
@policyBasedConfigurations84000084260260.096Passed
@postAction120000124040.018Passed
@properties3000031010.005Passed
@pyproject-generation240000246060.265Passed
@pyspark_data_delivery4000042020.011Passed
@pyspark_validation240000248080.001Passed
@queue7000072021.762Passed
@readPolicies40000040130130.089Passed
@receive-message200000205050.008Passed
@record1310000131430430.268Passed
@requiredField9000093030.000Passed
@send6000062020.001Passed
@singleRule100000104040.003Passed
@spark-application-generation150000153030.235Passed
@subscribe8000082020.000Passed
@successful6000062020.002Passed
@synchronous31000031130130.065Passed
@testutils4000042023.330Passed
@to_openlineage48000048130130.008Passed
@training4000042020.001Passed
@unit1690000169530530.195Passed
@validatedField120000124040.001Passed
@versioning3000031010.001Passed
@withoutConsole6000062020.094Passed
283200002832791079137.37878
100.00%0.00%0.00%0.00%0.00%100.00%0.00%100.00%
+ +
+
+
+ + + + + diff --git a/docs/report-feature_10_2950166908.html b/docs/report-feature_10_2950166908.html new file mode 100755 index 0000000..fe45696 --- /dev/null +++ b/docs/report-feature_10_2950166908.html @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Placeholder test + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Placeholder test2000021010.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @inference +
+ + +
+ Feature + Placeholder test + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_11_1704432389.html b/docs/report-feature_11_1704432389.html new file mode 100755 index 0000000..df7d44d --- /dev/null +++ b/docs/report-feature_11_1704432389.html @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Placeholder test + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Placeholder test2000021010.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @training +
+ + +
+ Feature + Placeholder test + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_12_1578193960.html b/docs/report-feature_12_1578193960.html new file mode 100755 index 0000000..5bc6bb3 --- /dev/null +++ b/docs/report-feature_12_1578193960.html @@ -0,0 +1,2519 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Test archetype-post-generate script + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Test archetype-post-generate script540000546060.572Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Test archetype-post-generate script + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.117 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I am creating a project from foundation-archetype + + 0.116 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the groupId is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the artifactId is "test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the version is "1.0.0-SNAPSHOT" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the package is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the projectGitUrl is "http://github.com/test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.302 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the package is "com.boozallen.project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the project is created from foundation-archetype + + 0.301 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the project creation "succeeds" for invalid package name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.foundation.PostGenerateSteps.tearDown() + + 0.008 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I am creating a project from foundation-archetype + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the groupId is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the artifactId is "test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the version is "1.0.0-SNAPSHOT" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the package is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the projectGitUrl is "http://github.com/test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.061 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the package is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the project is created from foundation-archetype + + 0.061 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the project creation "fails" for invalid package name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.foundation.PostGenerateSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I am creating a project from foundation-archetype + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the groupId is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the artifactId is "test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the version is "1.0.0-SNAPSHOT" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the package is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the projectGitUrl is "http://github.com/test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.022 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the package is "true.tests" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the project is created from foundation-archetype + + 0.022 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the project creation "fails" for invalid package name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.foundation.PostGenerateSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I am creating a project from foundation-archetype + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the groupId is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the artifactId is "test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the version is "1.0.0-SNAPSHOT" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the package is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the projectGitUrl is "http://github.com/test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.024 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the package is "org.example.public" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the project is created from foundation-archetype + + 0.024 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the project creation "fails" for invalid package name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.foundation.PostGenerateSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I am creating a project from foundation-archetype + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the groupId is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the artifactId is "test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the version is "1.0.0-SNAPSHOT" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the package is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the projectGitUrl is "http://github.com/test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.016 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the package is "null" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the project is created from foundation-archetype + + 0.016 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the project creation "fails" for invalid package name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.foundation.PostGenerateSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I am creating a project from foundation-archetype + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the groupId is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the artifactId is "test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the version is "1.0.0-SNAPSHOT" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the package is "org.example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the projectGitUrl is "http://github.com/test-project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.025 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the package is "org.example.final.project" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the project is created from foundation-archetype + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the project creation "fails" for invalid package name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.foundation.PostGenerateSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_13_1337672881.html b/docs/report-feature_13_1337672881.html new file mode 100755 index 0000000..c3f0d81 --- /dev/null +++ b/docs/report-feature_13_1337672881.html @@ -0,0 +1,1978 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: As an aiSSEMBLE user, I want my v1 chart images updated to the latest aiSSEMBLE version automatically so upgrade errors are minimized + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
As an aiSSEMBLE user, I want my v1 chart images updated to the latest aiSSEMBLE version automatically so upgrade errors are minimized270000276060.044Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @charts-v1 +
+ + +
+ Feature + As an aiSSEMBLE user, I want my v1 chart images updated to the latest aiSSEMBLE version automatically so upgrade errors are minimized + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a v1 chart + + 0.003 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark-operator
spark-infrastructure
jenkins
kafka-cluster
model-training-api
hive-metastore-db
hive-metastore-service
metadata
pipeline-invocation-service
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @charts-v1 +
+ + + 0.026 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.131 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the image tag in the values file is less than the current version of aiSSEMBLE + + 0.013 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the chart is updated to the current version in the values configuration + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a v1 chart + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark-operator
spark-infrastructure
jenkins
kafka-cluster
model-training-api
hive-metastore-db
hive-metastore-service
metadata
pipeline-invocation-service
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @charts-v1 +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the values file does not contain a hostname + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the image tag in the values file is less than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the chart is updated to the current version in the values configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a v1 chart + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark-operator
spark-infrastructure
jenkins
kafka-cluster
model-training-api
hive-metastore-db
hive-metastore-service
metadata
pipeline-invocation-service
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @charts-v1 +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the values file does not contain a hostname or image name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the image tag in the values file is less than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the chart is updated to the current version in the values configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a v1 chart + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark-operator
spark-infrastructure
jenkins
kafka-cluster
model-training-api
hive-metastore-db
hive-metastore-service
metadata
pipeline-invocation-service
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @charts-v1 +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the values file contains more properties after the image tag + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the image tag in the values file is less than the current version of aiSSEMBLE + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the chart is updated to the current version in the values configuration + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a v1 chart + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark-operator
spark-infrastructure
jenkins
kafka-cluster
model-training-api
hive-metastore-db
hive-metastore-service
metadata
pipeline-invocation-service
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @charts-v1 +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the image tag in the values file is equal to the current version of aiSSEMBLE + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a v1 chart + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark-operator
spark-infrastructure
jenkins
kafka-cluster
model-training-api
hive-metastore-db
hive-metastore-service
metadata
pipeline-invocation-service
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @charts-v1 +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the image tag in the values file is greater than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_14_3825185714.html b/docs/report-feature_14_3825185714.html new file mode 100755 index 0000000..4e971dd --- /dev/null +++ b/docs/report-feature_14_3825185714.html @@ -0,0 +1,1203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: As an aiSSEMBLE user, I want my chart dependencies updated to the latest aiSSEMBLE version automatically so upgrade errors are minimized + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
As an aiSSEMBLE user, I want my chart dependencies updated to the latest aiSSEMBLE version automatically so upgrade errors are minimized200000205050.026Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @chart-v2-migration +
+ + +
+ Feature + As an aiSSEMBLE user, I want my chart dependencies updated to the latest aiSSEMBLE version automatically so upgrade errors are minimized + + +
+ +
+ +
+ +
+ + +
+ Tags: + @chart-v2-migration +
+ + + 0.014 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with an aiSSEMBLE dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version less than the current version of aiSSEMBLE + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the dependency is updated to the current version + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @chart-v2-migration +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with an aiSSEMBLE dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version equal to the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @chart-v2-migration +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with an aiSSEMBLE dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version greater than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @chart-v2-migration +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with an aiSSEMBLE dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version less than the current snapshot version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the dependency is updated to the current version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @chart-v2-migration +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with no aiSSEMBLE dependencies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version less than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_15_3482636094.html b/docs/report-feature_15_3482636094.html new file mode 100755 index 0000000..0789c7b --- /dev/null +++ b/docs/report-feature_15_3482636094.html @@ -0,0 +1,722 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: As an aiSSEMBLE user, I want my Poetry Python packages updated to the latest naming conventions and versions automatically so upgrade errors are minimized + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
As an aiSSEMBLE user, I want my Poetry Python packages updated to the latest naming conventions and versions automatically so upgrade errors are minimized9000093030.029Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + As an aiSSEMBLE user, I want my Poetry Python packages updated to the latest naming conventions and versions automatically so upgrade errors are minimized + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.025 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pyproject.toml file with old aiSSEMBLE Python dependency naming conventions and versions + + 0.016 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pyproject.toml file migration is executed + + 0.008 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dependencies are updated to the newest naming convention and version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pyproject.toml file with old and new aiSSEMBLE Python dependency naming conventions and versions + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pyproject.toml file migration is executed + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dependencies are updated to the newest naming convention and version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pyproject.toml file with new aiSSEMBLE Python dependencies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pyproject.toml file migration is executed + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_16_3183573638.html b/docs/report-feature_16_3183573638.html new file mode 100755 index 0000000..6237c83 --- /dev/null +++ b/docs/report-feature_16_3183573638.html @@ -0,0 +1,1390 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Tilt file upgrade migration + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Tilt file upgrade migration210000217070.017Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Tilt file upgrade migration + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an existing Tiltfile with VERSION_AISSEMBLE is less than the project aiSSEMBLE version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Tiltfile version migration executes + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the VERSION_AISSEMBLE is updated to the project version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an existing Tiltfile with VERSION_AISSEMBLE is greater than the project version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Tiltfile version migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the VERSION_AISSEMBLE should not be migrated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an existing Tiltfile with VERSION_AISSEMBLE is equal to the project version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Tiltfile version migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the VERSION_AISSEMBLE should not be migrated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an existing Tiltfile with VERSION_AISSEMBLE is an older SNAPSHOT version than the project aiSSEMBLE version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Tiltfile version migration executes + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the VERSION_AISSEMBLE is updated to the specified version value from the Baton specifications in the Tiltfile + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an existing Tiltfile with VERSION_AISSEMBLE SNAPSHOT is greater than the project version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Tiltfile version migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the VERSION_AISSEMBLE should not be migrated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an existing Tiltfile with VERSION_AISSEMBLE is less than the project aiSSEMBLE version in x.xx.xx format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Tiltfile version migration executes + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the VERSION_AISSEMBLE is updated to the project version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an existing Tiltfile with VERSION_AISSEMBLE is greater than the project aiSSEMBLE version in x.xx.xx format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Tiltfile version migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the VERSION_AISSEMBLE should not be migrated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_17_1209920628.html b/docs/report-feature_17_1209920628.html new file mode 100755 index 0000000..ddd94a2 --- /dev/null +++ b/docs/report-feature_17_1209920628.html @@ -0,0 +1,891 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Migrate Delta Lake Spark dependencies + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Migrate Delta Lake Spark dependencies120000124040.028Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Migrate Delta Lake Spark dependencies + + +
+ +
The existing Delta Lake jars for accessing delta-lake tables via Spark are not compatible with Spark 3.5. We have + updated them from version 2.4.0 to 3.2.1. In order to upgrade beyond 2.4.0, the delta-core dependency has to be + migrated to delta-spark (just a straight rename starting at v3).
+ +
+ +
+ + +
+
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark-application values file that references delta-core/delta-storage in sparkApp.spec.deps.jars + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the 1.10.0 DeltaSpark yaml migration executes + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the delta-lake jar coordinates are updated to 3.2.1 + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a SparkApplication file that references delta-core/delta-storage in spec.deps.jars + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the 1.10.0 DeltaSpark yaml migration executes + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the delta-lake jar coordinates are updated to 3.2.1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.013 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM that references the delta-core package + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the 1.10.0 DeltaSpark POM migration executes + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + delta-core is updated to delta-spark and the version is set to the version.delta property + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM that references the delta-core package that does not have dependencyManagement + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the 1.10.0 DeltaSpark POM migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + delta-core is updated to delta-spark and the version is set to the version.delta property + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_18_1735824285.html b/docs/report-feature_18_1735824285.html new file mode 100755 index 0000000..c6626a1 --- /dev/null +++ b/docs/report-feature_18_1735824285.html @@ -0,0 +1,555 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: IT infrastructure is updated to use JDK 17 + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
IT infrastructure is updated to use JDK 176000062020.003Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + IT infrastructure is updated to use JDK 17 + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with outdated java docker image + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the it infrastructure migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the docker image being used is JDK 17 + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project that is using the java 17 docker image + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the it infrastructure migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the migration was skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_19_1983667711.html b/docs/report-feature_19_1983667711.html new file mode 100755 index 0000000..ae4178a --- /dev/null +++ b/docs/report-feature_19_1983667711.html @@ -0,0 +1,555 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Updates the affected java classes from their old package name to their new package name + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Updates the affected java classes from their old package name to their new package name6000062020.003Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Updates the affected java classes from their old package name to their new package name + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a Java file with the outdated Java package names + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Java Package Migration executes + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Java file is updated to use the new Java package names + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a Java file with the new Java package names + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Java Package Migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Java Package Migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_1_3412998821.html b/docs/report-feature_1_3412998821.html new file mode 100755 index 0000000..a2599ea --- /dev/null +++ b/docs/report-feature_1_3412998821.html @@ -0,0 +1,1764 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Pyspark Pipeline Step -&gt; Synchronous Inbound/Outbound Type Patterns + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Pyspark Pipeline Step -> Synchronous Inbound/Outbound Type Patterns31000031130130.065Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Pyspark Pipeline Step -> Synchronous Inbound/Outbound Type Patterns + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and void outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no outbound return type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no outbound return type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_20_1962376643.html b/docs/report-feature_20_1962376643.html new file mode 100755 index 0000000..a5c5018 --- /dev/null +++ b/docs/report-feature_20_1962376643.html @@ -0,0 +1,582 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Migrate a Maven Shade Plugin to use the updated Log4j dependency + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Migrate a Maven Shade Plugin to use the updated Log4j dependency7000072020.007Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Migrate a Maven Shade Plugin to use the updated Log4j dependency + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a Maven Shade Plugin instance with an outdated dependency on Log4j + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Log4j Maven Shade Plugin migration executes + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Maven Shade Plugin is updated to use the new Log4j dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the transformer configuration is updated with the new implementation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a Maven Shade Plugin instance without a Log4j dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Log4j Maven Shade Plugin migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Log4j Maven Shade Plugin migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_21_1652764441.html b/docs/report-feature_21_1652764441.html new file mode 100755 index 0000000..e5400f6 --- /dev/null +++ b/docs/report-feature_21_1652764441.html @@ -0,0 +1,943 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Update the pom dependencies previously managed by the aiSSEMBLE BOM to include the necessary version + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Update the pom dependencies previously managed by the aiSSEMBLE BOM to include the necessary version140000144040.011Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Update the pom dependencies previously managed by the aiSSEMBLE BOM to include the necessary version + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM that references dependencies previously managed by the aiSSEMBLE BOM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the POM Dependency Version migration executes + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dependencies are updated to use the necessary version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM that references dependencies previously managed by the aiSSEMBLE BOM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the POM has the dependencies in profiles and dependency management + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the POM Dependency Version migration executes + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dependencies are updated to use the necessary version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM that references dependencies previously managed by the aiSSEMBLE BOM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependencies are all using the updated version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the POM Dependency Version migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the POM Dependency Version migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM that does not contain any dependencies previously managed by the aiSSEMBLE BOM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the POM Dependency Version migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the POM Dependency Version migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_22_3127520627.html b/docs/report-feature_22_3127520627.html new file mode 100755 index 0000000..11ca1c4 --- /dev/null +++ b/docs/report-feature_22_3127520627.html @@ -0,0 +1,722 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Updates all references to the quarkus-bom and quarkus-universe-bom to use the new aissemble-quarkus-bom for managing Quarkus dependencies + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Updates all references to the quarkus-bom and quarkus-universe-bom to use the new aissemble-quarkus-bom for managing Quarkus dependencies9000093030.012Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Updates all references to the quarkus-bom and quarkus-universe-bom to use the new aissemble-quarkus-bom for managing Quarkus dependencies + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM that references the "quarkus-bom" Quarkus BOM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Quarkus Bom Migration executes + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Quarkus BOM is updated to the aiSSEMBLE Quarkus BOM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM that references the "quarkus-universe-bom" Quarkus BOM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Quarkus Bom Migration executes + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Quarkus BOM is updated to the aiSSEMBLE Quarkus BOM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM that does not contain a Quarkus BOM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Quarkus Bom Migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Quarkus Bom Migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_23_1052793861.html b/docs/report-feature_23_1052793861.html new file mode 100755 index 0000000..8d8623d --- /dev/null +++ b/docs/report-feature_23_1052793861.html @@ -0,0 +1,1412 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Migrate a Spark pipeline module CDI factoru with the new CDI classes to ensure messaging compatibility with Java 17 + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Migrate a Spark pipeline module CDI factoru with the new CDI classes to ensure messaging compatibility with Java 17250000256060.010Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Migrate a Spark pipeline module CDI factoru with the new CDI classes to ensure messaging compatibility with Java 17 + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a maven project with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a maven project "smallrye-reactive-messaging-kafka" dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging migration executes + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the CDI container factory is updated with the messaging and kafka context objects + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a maven project "smallrye-reactive-messaging-rabbitmq" dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging migration executes + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the CDI container factory is updated with the messaging context object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a maven project "smallrye-reactive-messaging-kafka" dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline module has already been migrated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Messaging migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a maven project "smallrye-reactive-messaging-rabbitmq" dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline module has already been migrated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Messaging migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no maven project smallrye dependencies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Messaging migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "habushu" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Messaging migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_24_2864640430.html b/docs/report-feature_24_2864640430.html new file mode 100755 index 0000000..598b579 --- /dev/null +++ b/docs/report-feature_24_2864640430.html @@ -0,0 +1,1412 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Migrate a Spark pipeline module pom.xml with the new CDI classes dependency to ensure messaging compatibility with Java 17 + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Migrate a Spark pipeline module pom.xml with the new CDI classes dependency to ensure messaging compatibility with Java 17250000256060.011Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Migrate a Spark pipeline module pom.xml with the new CDI classes dependency to ensure messaging compatibility with Java 17 + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "smallrye-reactive-messaging-kafka" dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging Pom migration executes + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the aissemble kafka messaging dependency is added to the POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "smallrye-reactive-messaging-rabbitmq" dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging Pom migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Messaging Pom migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "smallrye-reactive-messaging-kafka" dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline module pom has already been migrated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging Pom migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Messaging Pom migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "smallrye-reactive-messaging-rabbitmq" dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline module pom has already been migrated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging Pom migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Messaging Pom migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no smallrye dependencies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging Pom migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Messaging Pom migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with the "habushu" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Messaging Pom migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Messaging Pom migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_25_3441678139.html b/docs/report-feature_25_3441678139.html new file mode 100755 index 0000000..2132d4f --- /dev/null +++ b/docs/report-feature_25_3441678139.html @@ -0,0 +1,776 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Migrate a Spark pipeline module pom.xml with the javax servlet-api dependency + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Migrate a Spark pipeline module pom.xml with the javax servlet-api dependency110000113030.011Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Migrate a Spark pipeline module pom.xml with the javax servlet-api dependency + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.009 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the POM does not contain the javax servlet-api dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Servlet API migration executes + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the javax servlet-api dependency is added to the POM + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with "jar" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the POM already contains the javax servlet-api dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Servlet API migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Servlet API migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a POM with "habushu" packaging type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Spark Pipeline Servlet API migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark Pipeline Servlet API migration is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_26_2996978787.html b/docs/report-feature_26_2996978787.html new file mode 100755 index 0000000..3f1e920 --- /dev/null +++ b/docs/report-feature_26_2996978787.html @@ -0,0 +1,555 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Spark is updated to use appropriate v3.5.0 configs + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Spark is updated to use appropriate v3.5.0 configs6000062020.005Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Spark is updated to use appropriate v3.5.0 configs + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with outdated spark application configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the spark version upgrade migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the spark application configs are updated + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with up to date spark application configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the spark version upgrade migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the spark application configs are not updated + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_27_1247300435.html b/docs/report-feature_27_1247300435.html new file mode 100755 index 0000000..279fa97 --- /dev/null +++ b/docs/report-feature_27_1247300435.html @@ -0,0 +1,775 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Utilities -&gt; YAML + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Utilities -> YAML130000132020.006Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Utilities -> YAML + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a YAML file: + + 0.001 + +
+ + + + + + + + + +
+
+ +
+
name: test
+size: 7.5
+count: 12
+complete: True
+nested: {
+  size: 2.0
+}
+multiple:
+  - intvalue: 5
+  - intvalue: 7
+
+
+
+ + + + + + + +
+
+ + +
+ When + the file is loaded + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the string value of the property "name" is "test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the decimal value of the property "size" is 7.5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the integer value of the property "count" is 12 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the boolean value of the property "complete" is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the property "nested" is an object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the decimal value of the property "size" of the Object "nested" is 2.0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the size of the list "multiple" is 2 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "intvalue" of item 1 of the list "multiple" is 7 + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a YAML file: + + 0.000 + +
+ + + + + + + + + +
+
+ +
+
- red
+- blue
+- yellow
+
+
+
+ + + + + + + +
+
+ + +
+ When + the file is loaded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the size of the list "items" is 3 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_28_2913438643.html b/docs/report-feature_28_2913438643.html new file mode 100755 index 0000000..5b9e8e3 --- /dev/null +++ b/docs/report-feature_28_2913438643.html @@ -0,0 +1,1514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Drift Detection -&gt; Standard Deviation can be Calculated on Control Data + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Drift Detection -> Standard Deviation can be Calculated on Control Data27000027100100.155Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Drift Detection -> Standard Deviation can be Calculated on Control Data + + +
+ +
As the system, I can calculate the mean and standard deviation of a set of control data. Often the expected mean and standard deviation + are known values. In cases when the mean and standard deviation either aren't known, aren't configured, or need to be overridden, then + a set of control data can be used to calculate the mean and standard deviation that will be used to detect drift on the input data.
+ +
+ +
+ + + + + + 0.150 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "45, 48, 52, 57" + + 0.145 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the mean is calculated + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the mean is 50.5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "-4, -2, 0, 1, 3" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the mean is calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the mean is -0.4 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "0.25, 2, 0.75" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the mean is calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the mean is 1.0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "3, 4, 3, 2, 3, 4" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a calculated mean of 3.166667 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the standard deviation is calculated + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation is 0.752773 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "2, 1, 55, 56, 57, 98, 99" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a calculated mean of 52.571429 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the standard deviation is calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation is 39.736034 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "-10.1, -8.99, -1.02, 1.78, 3.2" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a calculated mean of -3.026 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the standard deviation is calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation is 6.154176 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a calculated number 3.14159265 is rounded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the number is rounded 3.141593 using the HALF EVEN rounding method and last 6 digits + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a calculated number 1.66666666667 is rounded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the number is rounded 1.666667 using the HALF EVEN rounding method and last 6 digits + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a calculated number 9219.65434521 is rounded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the number is rounded 9219.654345 using the HALF EVEN rounding method and last 6 digits + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_29_548729583.html b/docs/report-feature_29_548729583.html new file mode 100755 index 0000000..ac96021 --- /dev/null +++ b/docs/report-feature_29_548729583.html @@ -0,0 +1,886 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Drift Detection -&gt; Calculate Upper and Lower Bounds for Detecting Drift + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Drift Detection -> Calculate Upper and Lower Bounds for Detecting Drift160000164040.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @calculateBounds + @unit +
+ + +
+ Feature + Drift Detection -> Calculate Upper and Lower Bounds for Detecting Drift + + +
+ +
Once the mean, standard deviation, and standard score/zScore are known, the upper and lower bounds for the range of + acceptable values can be calculated. Values that are greater than the upper bound or less than than the lower bound + would be flagged for drift.
+ +
+ +
+ + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 30, a standard deviation of 2, and a zScore 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 32 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be 28 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 0.05, a standard deviation of 0.01, and a zScore 2 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 0.07 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be 0.03 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 1, a standard deviation of 2, and a zScore 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 3 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be -1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 0, a standard deviation of 4, and a zScore 1.5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 6 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be -6 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_2_68740289.html b/docs/report-feature_2_68740289.html new file mode 100755 index 0000000..5028edf --- /dev/null +++ b/docs/report-feature_2_68740289.html @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Placeholder test + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Placeholder test2000021010.009Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Placeholder test + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.009 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_30_1160643803.html b/docs/report-feature_30_1160643803.html new file mode 100755 index 0000000..442cc21 --- /dev/null +++ b/docs/report-feature_30_1160643803.html @@ -0,0 +1,1148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Drift Detection -&gt; Default Standard Deviation Drift Detection + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Drift Detection -> Default Standard Deviation Drift Detection140000145050.123Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Drift Detection -> Default Standard Deviation Drift Detection + + +
+ +
As a user, I can use standard deviations to detect drift on a set of data. The zScore is the number of standard deviations a value is + from the mean. In many cases, the expected mean and standard deviation are known values, and so can be configured within the policy. + When drift detection is run against a set of input data using standard score, the configured mean and standard deviations are used to + see if any values appear outside of the expected number of standard deviations. If so, there is drift within the input data. + + A set of control data can be used to set the mean and standard deviation if the expected values are not known, configured, or need to be overridden.
+ +
+ +
+ + + + + + 0.113 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.348 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy with one rule configured to use the standard deviation algorithm + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the rule specifies a mean and standard deviation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked using the policy + + 0.111 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation will use the specified mean and standard deviation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.002 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.040 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy with one rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the rule specifies a mean and standard deviation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked using control data and the policy + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation will use the mean and standard deviation calculated from the control data + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.038 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + the zScore is not configured by a rule + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the zScore is set to 1 by default + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.031 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy with one rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the rule specifies a zScore + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation will use the zScore configured by the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_31_2748063226.html b/docs/report-feature_31_2748063226.html new file mode 100755 index 0000000..b4cea90 --- /dev/null +++ b/docs/report-feature_31_2748063226.html @@ -0,0 +1,2340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Drift Detection -&gt; Detect Drift using Standard Deviations + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Drift Detection -> Detect Drift using Standard Deviations330000337070.026Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Drift Detection -> Detect Drift using Standard Deviations + + +
+ +
A user, I can detect drift using the default standard deviation algorithm
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy with a single rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.034 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "52.0" using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy with a single rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.029 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "57.99999" using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy with a single rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.032 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "53.98, 52.009, 56.3, 57.651" using the policy + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy with a single rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.026 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "51.999" using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy with a single rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.024 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "58.0001" using the policy + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy with a single rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.027 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "55, 56.12, 52, 52.14, 51.75" using the policy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy with a single rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.025 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift is detected on a input + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the flagged value will be included in the result + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_32_739496672.html b/docs/report-feature_32_739496672.html new file mode 100755 index 0000000..b2bd7c8 --- /dev/null +++ b/docs/report-feature_32_739496672.html @@ -0,0 +1,1619 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Drift Detection -&gt; Configure rules for detecting drift + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Drift Detection -> Configure rules for detecting drift29000029100100.008Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Drift Detection -> Configure rules for detecting drift + + +
+ +
As a user, I need to be able to configure rules for detecting drift, including configuring algorithms
+ +
+ +
+ + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 1 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + the configured policies reference an algorithm "StandardDeviation" by class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the algorithm from "com.boozallen.drift.detection.algorithm.StandardDeviationDriftAlgorithm" is used + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + the configured policies reference an algorithm "MyDriftAlgorithm" by class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the algorithm from "com.boozallen.drift.detection.algorithm.MyDriftAlgorithm" is used + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + the configured policies reference an algorithm "com.different.company.algorithm.CustomDriftAlgorithm" by class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the algorithm from "com.different.company.algorithm.CustomDriftAlgorithm" is used + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the algorithm "StandardDeviation" with the following configurations: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
mean25.07
standardDeviation3.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the algorithm "StandardDeviation" with the following configurations: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
standardDeviation2.5
zScore2
+ + + + + + + + + +
+
+ + +
+ And + the policy rule specifies a target of "myColumn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the target is set as "myColumn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses an algorithm with the following unrecognized configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
aMadeUpSetting50.0
notRelevantSetting1.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the unrecognized configurations are ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_33_1595417207.html b/docs/report-feature_33_1595417207.html new file mode 100755 index 0000000..dd4d9ba --- /dev/null +++ b/docs/report-feature_33_1595417207.html @@ -0,0 +1,776 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Drift Detection -&gt; Read policies from a json file + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Drift Detection -> Read policies from a json file120000124040.018Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @readPolicies + @unit +
+ + +
+ Feature + Drift Detection -> Read policies from a json file + + +
+ +
As the system, I need to be able to read policies from files in a directory
+ +
+ +
+ + +
+ Tags: + @readPolicies + @unit +
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy with multiple rules + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for drift service detection + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @readPolicies + @unit +
+ + + 0.007 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + multiple json files exist, each with a configured policy + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the files + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the multiple json files are available for drift service detection + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @readPolicies + @unit +
+ + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured without an identifier + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is not added + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @readPolicies + @unit +
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with multiple policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the file + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the file are available for drift service detection + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_34_1912849072.html b/docs/report-feature_34_1912849072.html new file mode 100755 index 0000000..9a14572 --- /dev/null +++ b/docs/report-feature_34_1912849072.html @@ -0,0 +1,1302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Drift Detection -&gt; Detect drift using a policy that has a single rule + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Drift Detection -> Detect drift using a policy that has a single rule140000144040.011Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @singleRule + @cdi +
+ + +
+ Feature + Drift Detection -> Detect drift using a policy that has a single rule + + +
+ +
As a user, I can detect drift using a policy has a single rule configured
+ +
+ +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with a single rule + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @singleRule + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.024 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy and a single input + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + drift detection is run on the single input using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with a single rule + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @singleRule + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy and a list of inputs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + drift detection is run on the list of inputs using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with a single rule + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @singleRule + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.024 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy, a single input, and control data + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the control data is used to set the metrics for the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detection is run on the single input using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with a single rule + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @singleRule + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy, a list of inputs, and control data + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the control data is used to set the metrics for the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detection is run on the list of inputs using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_35_2033951047.html b/docs/report-feature_35_2033951047.html new file mode 100755 index 0000000..f3d5c98 --- /dev/null +++ b/docs/report-feature_35_2033951047.html @@ -0,0 +1,1611 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Drift Detection -&gt; Send an alert about the status of drift detection + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Drift Detection -> Send an alert about the status of drift detection200000207070.017Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @alerting + @cdi +
+ + +
+ Feature + Drift Detection -> Send an alert about the status of drift detection + + +
+ +
As the system, I can send alerts about the results of drift detection
+ +
+ +
+ + +
+ Tags: + @alerting + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.022 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + an alert is sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the alert is published to an "alerts" topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @alerting + @cdi +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.018 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been defined with no alert configuration + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "no drift is detected" using the policy specified + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is sent that "no drift is detected" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @alerting + @cdi +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.020 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been defined with no alert configuration + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is sent that "drift is detected" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @alerting + @cdi +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.016 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to only send alerts when drift is detected + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "no drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert "is not" sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @alerting + @cdi +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to only send alerts when drift is detected + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert "is" sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @alerting + @cdi +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to never send alerts + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "no drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is not sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @alerting + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.021 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to never send alerts + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is not sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_36_739496672.html b/docs/report-feature_36_739496672.html new file mode 100755 index 0000000..0774c89 --- /dev/null +++ b/docs/report-feature_36_739496672.html @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Policy Configuration -&gt; Configure rules for policies + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Policy Configuration -> Configure rules for policies42000042130130.092Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Policy Configuration -> Configure rules for policies + + +
+ +
As a user, I need to be able to configure rules for policies
+ +
+ +
+ + + + + + 0.084 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 1 rules + + 0.081 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with the deprecated target attribute + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a rule within a policy has been configured without a class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the rule is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has no valid rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid policy exists + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the policy specifies a target + + 0.000 + +
+ + + + + + + + + + + + + + + + +
retrieveUrltype
http://mydata/lives/hererest
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the target type is set as "rest" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the target's retrieve url is set as "http://mydata/lives/here" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy exists with the following targets: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
retrieveUrltype
http://getdata1.comrest1
http://getdata2.comrest2
+ + + + + + + + + +
+
+ + +
+ And + a policy rule specifies the target configurations: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
myQueryParammyDataName
count10
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configured targets are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the class "MyCalculator" with the following configurations: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
mean25.07
standardDeviation3.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_37_1595417207.html b/docs/report-feature_37_1595417207.html new file mode 100755 index 0000000..28b3b46 --- /dev/null +++ b/docs/report-feature_37_1595417207.html @@ -0,0 +1,776 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Policy Based Configuration -&gt; Read policies from a json file + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Policy Based Configuration -> Read policies from a json file120000124040.060Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @readPolicies + @unit +
+ + +
+ Feature + Policy Based Configuration -> Read policies from a json file + + +
+ +
As the system, I need to be able to read policies from files in a directory
+ +
+ +
+ + +
+ Tags: + @readPolicies + @unit +
+ + + 0.045 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy with multiple rules + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.019 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @readPolicies + @unit +
+ + + 0.008 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + multiple json files exist, each with a configured policy + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the files + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the multiple json files are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @readPolicies + @unit +
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured without an identifier + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is not added + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @readPolicies + @unit +
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with multiple policies + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the file + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the file are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_38_962221290.html b/docs/report-feature_38_962221290.html new file mode 100755 index 0000000..56f7439 --- /dev/null +++ b/docs/report-feature_38_962221290.html @@ -0,0 +1,3538 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Load configurations at specified URI based on environment context + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Load configurations at specified URI based on environment context56000056150150.522Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @config-loader +
+ + +
+ Feature + Load configurations at specified URI based on environment context + + +
+ +
+ +
+ +
+ + + + + + 0.352 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + URIs pointing to valid base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configuration service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are loaded into the configuration store + + 0.342 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the configurations were loaded successfully + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration service records the that the given configurations were loaded successfully + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.019 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + URIs pointing to valid base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration service records the that the given configurations were loaded successfully + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configuration service starts again + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration service skips the loading process + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + notifies the user that the configurations were previously loaded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.021 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the properties are loaded + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConfigLoader validates the URI and its contents + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + consumes the base properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + augments the base with the environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.022 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the configuration service has started + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + requests a configuration property + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the property value is returned + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.049 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.049 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConfigLoader consumes the base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the environment policy overrides the base policy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "targets" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "targets-retrieve-url" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "rules" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "rules-classname" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "regeneration-method" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "regeneration-method-classname" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to policies targeting the same property + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a property cannot be targeted by multiple policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + there exists a krausening_password and encrypted properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configuration service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the loaded properties contains the decrypted value + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.027 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the config loader to configured to use "krausening" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the properties are loaded + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configurations are written + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the properties can be read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @config-loader +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the config loader to configured to use "inMemory" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the properties are loaded + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configurations are written + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the properties can be read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_39_518244277.html b/docs/report-feature_39_518244277.html new file mode 100755 index 0000000..a04bf0d --- /dev/null +++ b/docs/report-feature_39_518244277.html @@ -0,0 +1,441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Modify kubernetes resources with config values using a mutating webhook + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Modify kubernetes resources with config values using a mutating webhook6000061010.151Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @config-webhook +
+ + +
+ Feature + Modify kubernetes resources with config values using a mutating webhook + + +
+ +
+ +
+ +
+ + +
+ Tags: + @config-webhook +
+ + + 0.151 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the configuration service has started + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a ConfigMap definition that contains the substitution key exists + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the ConfigMap definition has the injection metadata label + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a kubernetes resource request is made to create a ConfigMap + + 0.143 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConfigMap patch is returned + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the ConfigMap patch contains the injected value + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_3_3123976620.html b/docs/report-feature_3_3123976620.html new file mode 100755 index 0000000..bff079a --- /dev/null +++ b/docs/report-feature_3_3123976620.html @@ -0,0 +1,1303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Validation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Validation240000248080.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @pyspark_validation +
+ + +
+ Feature + Validation + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "999" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "100" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "999" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "999" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "999" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "0" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "999" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "1001" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "12.345" and "100.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "12.345" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "12.345" and "100.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "100.0" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "12.345" and "100.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "12" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "12.345" and "100.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "100.1" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_40_3864579381.html b/docs/report-feature_40_3864579381.html new file mode 100755 index 0000000..3a6c4a7 --- /dev/null +++ b/docs/report-feature_40_3864579381.html @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Versioning + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Versioning3000031010.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @versioning +
+ + +
+ Feature + Versioning + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model has been trained + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I version the trained model + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the model artifacts are packaged and deployed + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_4120806554.html b/docs/report-feature_4120806554.html new file mode 100755 index 0000000..d6f18b2 --- /dev/null +++ b/docs/report-feature_4120806554.html @@ -0,0 +1,1845 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Pyspark Pipeline Step -&gt; Asynchronous Inbound/Outbound Type Patterns + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Pyspark Pipeline Step -> Asynchronous Inbound/Outbound Type Patterns38000038110110.062Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Pyspark Pipeline Step -> Asynchronous Inbound/Outbound Type Patterns + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.012 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and void outbound type is defined + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and native outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and void outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and native outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and native outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_41_4078915426.html b/docs/report-feature_41_4078915426.html new file mode 100755 index 0000000..9507e31 --- /dev/null +++ b/docs/report-feature_41_4078915426.html @@ -0,0 +1,497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Encryption -&gt; Read policies from a json file + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Encryption -> Read policies from a json file6000062020.242Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @encryptPolicies +
+ + +
+ Feature + Encryption -> Read policies from a json file + + +
+ +
As the system, I need to be able to read policies from files in a directory
+ +
+ +
+ + +
+ Tags: + @encryptPolicies +
+ + + 0.241 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy that contains a list of encrypt fields + + 0.239 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for field encryption + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @encryptPolicies +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy that specifies an algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available with the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_42_3960257412.html b/docs/report-feature_42_3960257412.html new file mode 100755 index 0000000..b879b3c --- /dev/null +++ b/docs/report-feature_42_3960257412.html @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Data Encryption -&gt; Data encryption using a policy + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Data Encryption -> Data encryption using a policy3000031010.005Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Data Encryption -> Data encryption using a policy + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a data encryption policy has been persisted to file + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy contains encryption information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_43_3390860467.html b/docs/report-feature_43_3390860467.html new file mode 100755 index 0000000..49e372c --- /dev/null +++ b/docs/report-feature_43_3390860467.html @@ -0,0 +1,2112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Policy Configuration -&gt; Configure rules for policies + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Policy Configuration -> Configure rules for policies42000042130130.004Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Policy Configuration -> Configure rules for policies + + +
+ +
<pre>As a user, I need to be able to configure rules for policies</pre>
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 1 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with the deprecated target attribute + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a rule within a policy has been configured without a class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the rule is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has no valid rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid policy exists + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the policy specifies a target + + 0.000 + +
+ + + + + + + + + + + + + + + + +
retrieveUrltype
http://mydata/lives/hererest
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the target type is set as "rest" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the target's retrieve url is set as "http://mydata/lives/here" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy exists with the following targets + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
retrieveUrltype
http://getdata1.comrest1
http://getdata2.comrest2
+ + + + + + + + + +
+
+ + +
+ And + a policy rule specifies the target configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
myQueryParammyDataName
count10
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configured targets are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the class "MyCalculator" with the following configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
mean25.07
standardDeviation3.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_44_1343427850.html b/docs/report-feature_44_1343427850.html new file mode 100755 index 0000000..cc1fb1a --- /dev/null +++ b/docs/report-feature_44_1343427850.html @@ -0,0 +1,926 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Policy Based Configuration -&gt; Read policies from a json file + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Policy Based Configuration -> Read policies from a json file160000165050.010Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @readPolicies + @unit +
+ + +
+ Feature + Policy Based Configuration -> Read policies from a json file + + +
+ +
<pre>As the system, I need to be able to read policies from files in a directory</pre>
+ +
+ +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy with multiple rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy using the deprecated target attribute + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the policy has the deprecated target in the new targets attribute + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + multiple json files exist, each with a configured policy + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the files + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the multiple json files are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured without an identifier + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is not added + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with multiple policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the file are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_45_357579510.html b/docs/report-feature_45_357579510.html new file mode 100755 index 0000000..7f13cc9 --- /dev/null +++ b/docs/report-feature_45_357579510.html @@ -0,0 +1,763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Model Training API + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Model Training API120000124041.410Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @modelTrainingAPI +
+ + +
+ Feature + Model Training API + + +
+ +
+ +
+ +
+ + +
+
+ + + 1.405 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have Kubernetes cluster access + + 1.402 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I trigger a training job + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I get a valid model training job name returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have Kubernetes cluster access + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I request job logs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I get logs returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have Kubernetes cluster access + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I request a list of training jobs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I get a list of training jobs returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have Kubernetes cluster access + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I kill a training job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I get a message indicating the job has been deleted + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_46_1418567896.html b/docs/report-feature_46_1418567896.html new file mode 100755 index 0000000..87f34de --- /dev/null +++ b/docs/report-feature_46_1418567896.html @@ -0,0 +1,1033 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Baseline Lineage Instance can be updated by model facets + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Baseline Lineage Instance can be updated by model facets200000205050.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @model_lineage +
+ + +
+ Feature + Baseline Lineage Instance can be updated by model facets + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a source code facet with a specified type, URL and path + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the job is updated with the source code facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the job retains the properties of the source code facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a Hyperparameter facet with a specificied parameter and value + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the run is updated with the Hyperparameter facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the run retains the properties of the Hyperparameter facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a MLflowRunFacet is defined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the run is updated with the MLflowRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the run retains the properties of the MLflowRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a HardwareDetailsRunFacet is defined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the run is updated with the HardwareDetailsRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the run retains the properties of the HardwareDetailsRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a PerformanceMetricRunFacet is defined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the run is updated with the PerformanceMetricRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the run retains the properties of the PerformanceMetricRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_47_1039047146.html b/docs/report-feature_47_1039047146.html new file mode 100755 index 0000000..5522a92 --- /dev/null +++ b/docs/report-feature_47_1039047146.html @@ -0,0 +1,1029 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Asynchronous handling of messages is simplified + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Asynchronous handling of messages is simplified120000124040.054Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Asynchronous handling of messages is simplified + + +
+ +
+ +
+ +
+ + + + + + 0.052 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.206 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.001 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_exceptional_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to NACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an exception occurs during message processing + + 0.051 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is NACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_exceptional_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to DROP + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an exception occurs during message processing + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is ACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_successful_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to NACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + message processing occurs successfully + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is ACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_successful_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to DROP + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + message processing occurs successfully + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is ACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_48_1516586017.html b/docs/report-feature_48_1516586017.html new file mode 100755 index 0000000..f1b6d7c --- /dev/null +++ b/docs/report-feature_48_1516586017.html @@ -0,0 +1,3258 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Data lineage wrapper classes can be used to produce equivalent classes from the OpenLineage project + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Data lineage wrapper classes can be used to produce equivalent classes from the OpenLineage project57000057170170.009Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @buildOLClasses +
+ + +
+ Feature + Data lineage wrapper classes can be used to produce equivalent classes from the OpenLineage project + + +
+ +
+ +
+ +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.164 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Run Facet object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Facet's function to build an OpenLineage RunFacet is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage RunFacet will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Job Facet object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Facet's function to build an OpenLineage JobFacet is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage JobFacet will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Dataset Facet object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Facet's function to build an OpenLineage DatasetFacet is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage DatasetFacet will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Run object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run's function to build an OpenLineage object is called + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Run will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Job object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job's function to build an OpenLineage object is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Job will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Input Dataset object named "test_input_dataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Input Dataset's function to build an OpenLineage object is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Input Dataset will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Input Dataset object with an input facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Input Dataset's function to build an OpenLineage object is called with an input facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Input Dataset will be created with its fields populated including the input facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Output Dataset object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Output Dataset's function to build an OpenLineage object is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Output Dataset will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Output Dataset object with a defined output facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Output Dataset's function to build an OpenLineage object is called with a defined output facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Output Dataset will be created with its fields populated including an output facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Run Event object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run Event is converted to the OpenLineage format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Run Event will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myJob.producer" with the value "http://github.com/myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run Event is converted to the OpenLineage format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the producer value of the event is set to "http://github.com/myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.producer" with the value "http://github.com/producer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "someOtherJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run Event is converted to the OpenLineage format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the producer value of the event is set to "http://github.com/producer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myJob.namespace" with the value "myNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run Event is converted to the OpenLineage format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Job namespace value of the event is set to "myNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myJob.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" has a default namespace "myDefaultNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Job namespace value is set to "myDefaultNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myJob.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid Job object named "myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is raised + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myInputDataset.namespace" with the value "myDataSource" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid Input Dataset object named "myInputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Input Dataset is translated to an OpenLineage Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the namespace value of the Dataset is set to "myDataSource" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myInputDataset.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a valid Input Dataset object named "myInputDataset" is declared + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is raised + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_49_3366736176.html b/docs/report-feature_49_3366736176.html new file mode 100755 index 0000000..102449f --- /dev/null +++ b/docs/report-feature_49_3366736176.html @@ -0,0 +1,1374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Emit data lineage events + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Emit data lineage events160000165050.249Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @emission +
+ + +
+ Feature + Emit data lineage events + + +
+ +
+ +
+ +
+ + +
+ Tags: + @emission + @withoutConsole + @cdi +
+ + + 0.093 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.noConsole() + + 0.390 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the event is emitted via messaging + + 0.093 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is sent over the outbound channel + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @emission + @cdi +
+ + + 0.064 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the ConsoleTransport class is added to the CDI container + + 0.061 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the event is emitted via messaging + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is received for logging to the console + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @emission + @withoutConsole + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.noConsole() + + 0.044 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the event is emitted via messaging + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is not received for logging to the console + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @emission + @cdi +
+ + + 0.042 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a configuration that opts into console emission + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the CDI container is created with automatically selected context + + 0.041 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConsoleTransport class is available + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @emission + @cdi +
+ + + 0.048 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a configuration that opts out of console emission + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the CDI container is created with automatically selected context + + 0.045 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConsoleTransport class is not available + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_4_4233289457.html b/docs/report-feature_4_4233289457.html new file mode 100755 index 0000000..333d3a6 --- /dev/null +++ b/docs/report-feature_4_4233289457.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Basic Pipeline Lineage Event Test + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Basic Pipeline Lineage Event Test4000041010.130Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @data-lineage +
+ + +
+ Feature + Basic Pipeline Lineage Event Test + + +
+ +
+ +
+ +
+ + +
+ Tags: + @data-lineage +
+ + + 0.130 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.LineageTest.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline run is created + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline has the step name Ingest + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the step lineage run event is created + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step lineage run event's parent run is the pipeline run + + 0.121 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.pattern.LineageTest.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_50_553965108.html b/docs/report-feature_50_553965108.html new file mode 100755 index 0000000..5011066 --- /dev/null +++ b/docs/report-feature_50_553965108.html @@ -0,0 +1,2221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Baseline data lineage type wrappers can be converted to equivalent openlineage types. + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Baseline data lineage type wrappers can be converted to equivalent openlineage types.48000048130130.008Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @to_openlineage +
+ + +
+ Feature + Baseline data lineage type wrappers can be converted to equivalent openlineage types. + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid Run object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run is translated to an OpenLineage Run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage Run will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid Job object named "test_job" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage Job will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid Dataset object named "test_dataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Dataset is translated to an OpenLineage Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage Dataset will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid InputDataset object named "test_InputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the InputDataset is translated to an OpenLineage InputDataset + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage InputDataset will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid OutputDataset object named "test_OutputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the OutputDataset is translated to an OpenLineage OutputDataset + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage OutputDataset will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid RunEvent object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the RunEvent has an InputDataset named "test_InputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the RunEvent has an OutputDataset named "test_OutputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the RunEvent has an OutputDataset named "test_OutputDataset2" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the RunEvent is translated to an OpenLineage RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage RunEvent will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid Facet object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Facet is translated to an OpenLineage Facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage Facet will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myJob.producer" with the value "http://github.com/myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the RunEvent is translated to an OpenLineage RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the producer value of the event is set to "http://github.com/myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.producer" with the value "http://github.com/producer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "someOtherJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the RunEvent is translated to an OpenLineage RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the producer value of the event is set to "http://github.com/producer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myJob.namespace" with the value "myNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the RunEvent is translated to an OpenLineage RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Job namespace value of the event is set to "myNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myJob.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" has a default namespace "myDefaultNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Job namespace value is set to "myDefaultNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myJob.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid Job object named "myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is raised + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myDataset.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid Dataset object named "myDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Dataset is translated to an OpenLineage Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is raised + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_51_1090875135.html b/docs/report-feature_51_1090875135.html new file mode 100755 index 0000000..60b4971 --- /dev/null +++ b/docs/report-feature_51_1090875135.html @@ -0,0 +1,1627 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Baseline data lineage type wrappers can be instantiated, and validate their parameters appropriately. + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Baseline data lineage type wrappers can be instantiated, and validate their parameters appropriately.26000026130130.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @lineage_types +
+ + +
+ Feature + Baseline data lineage type wrappers can be instantiated, and validate their parameters appropriately. + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a RunEvent is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public RunEvent fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Job is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public Job fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Job is instantiated with a non-string name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Facet is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public Facet fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Facet is instantiated with an illegal schema_url + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Dataset is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public Dataset fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Dataset is instantiated with a non-string name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an InputDataset is instantiated with an illegal input_facet dict + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an OutputDataset is instantiated with an illegal output_facet dict + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Run is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public Run fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Run is instantiated with a non-UUID run_id + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a lineage object is instantiated with a facet dict containing an illegal value + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Lineage Object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a lineage object is instantiated with a facet dict containing an illegal key + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Lineage Object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_52_1561371593.html b/docs/report-feature_52_1561371593.html new file mode 100755 index 0000000..ed762f2 --- /dev/null +++ b/docs/report-feature_52_1561371593.html @@ -0,0 +1,11107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Specify composite of semantically defined types + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Specify composite of semantically defined types1440000144360360.350Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @composite +
+ + +
+ Feature + Specify composite of semantically defined types + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.018 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.018 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.055 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.189 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite described by "Address", "com.boozallen.aiops.location" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.052 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available can be looked up by the name "Address" and "com.boozallen.aiops.location" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite described by "NetFlowRecord", "com.boozallen.aiops.cyber" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available can be looked up by the name "NetFlowRecord" and "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.002 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite described by "UserProfile", "com.boozallen.aiops.person" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available can be looked up by the name "UserProfile" and "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.002 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a description "This is a description." + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with a description of "This is a description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a description "This composite represents a User Profile." + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with a description of "This composite represents a User Profile." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.015 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with the fields named: + + 0.002 + +
+ + + + + + + + + + + + + + +
number
street
+ + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with fields named: + + 0.007 + +
+ + + + + + + + + + + + + + +
number
street
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with the fields named: + + 0.001 + +
+ + + + + + + + + + + + + + +
airportCode
arrivalTime
+ + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
airportCode
arrivalTime
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with the fields named: + + 0.001 + +
+ + + + + + + + + + + + + + +
balls
strikes
+ + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
balls
strikes
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has a description "This is a composite field description." + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a description of "This is a composite field description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has a description "This composite field represents the SSN of a user." + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a description of "This composite field represents the SSN of a user." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a simple type of "string" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "airportCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a simple type of "string" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a simple type of "integer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column name "street_name" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a column name of "street_name" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column name "airport_code" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a column name of "airport_code" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column name "COUNT" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a column name of "COUNT" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column is required + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and marked as required + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column as optional + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and marked as optional + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a protection policy of "obfuscatePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "zipCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a protection policy of "obfuscatePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "airportCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no protection policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no protection policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" and a protection policy of "encryptPolicy" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a protection policy of "encryptPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "zipCode" and a protection policy of "stripExtendedZipCodePolicy" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a protection policy of "stripExtendedZipCodePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a ethics policy of "sampleMinimumPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "stateOfOrigin" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a ethics policy of "inStateUnivserityDistributionPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no ethics policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "airportCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no ethics policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" and a ethics policy of "archiveOlderThanNiceMonthsPolicy" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a ethics policy of "archiveOlderThanNiceMonthsPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "stateOfOrigin" and a ethics policy of "noOpPolicy" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a ethics policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "airportCode" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a drift policy of "profileOutOfStandardRangePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "milesFromHome" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a drift policy of "fiveMileZonePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no drift policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "zipCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no drift policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" and a drift policy of "noOpPolicy" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a drift policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
streetNamestringobfuscatePolicy
zipCodestringobfuscatePolicy
airportCodestringprofileOutOfStandardRangePolicy
milesFromHomestringfiveMileZonePolicy
countintegersampleMinimumPolicy
stateOfOriginstringinStateUnivserityDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.006 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "stateOfOrigin" and a drift policy of "tenMileExpandedZonePolicy" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a drift policy of "tenMileExpandedZonePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_53_609867244.html b/docs/report-feature_53_609867244.html new file mode 100755 index 0000000..206f3f2 --- /dev/null +++ b/docs/report-feature_53_609867244.html @@ -0,0 +1,10316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Generating pipeline resources + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Generating pipeline resources2580000258350351.609Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Generating pipeline resources + + +
+ +
+ +
+ +
+ + + + + + 0.110 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.086 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "jar" under "example-data-records" + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records" module generates the profile "data-delivery-combined-data-records" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.035 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "habushu" under "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records" module generates the profile "data-delivery-combined-data-records-python" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.045 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.008 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.035 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "jar" under "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-java" module generates the profile "data-delivery-combined-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-python" module generates the profile "data-delivery-combined-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.051 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.005 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.041 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "jar" under "example-data-records-core" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-core" module generates the profile "data-delivery-data-records-core-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "jar" under "example-data-records-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-spark" module generates the profile "data-delivery-data-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark" has a dependency on "example-data-records-core" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.038 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.031 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "habushu" under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-core" module generates the profile "data-delivery-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-spark" module generates the profile "data-delivery-data-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark" has a dependency on "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.056 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.047 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "jar" under "example-data-records-core-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a semantic-data module is generated with "habushu" under "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "jar" under "example-data-records-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-spark-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-java" has a dependency on "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-python" has a dependency on "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.034 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "habushu" under "example-data-records-python" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.025 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "jar" under "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.046 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-core" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-spark" with "jar" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.037 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "habushu" under "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-spark-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-python" has a dependency on "example-data-records-core-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.044 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-core" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-spark" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.037 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "jar" under "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "jar" under "example-data-records-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-java" has a dependency on "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-spark-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.016 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.014 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.018 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.016 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.024 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.023 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.027 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.042 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-combined-data-records" is generated + + 0.039 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.049 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-combined-data-records-python" is generated + + 0.046 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.020 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-records-core-java" is generated + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.031 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-records-core-python" is generated + + 0.028 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.016 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-spark" is generated + + 0.013 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.032 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-pyspark" is generated + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pyproject.toml file has a dependency on "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.039 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.030 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "example-data-records" + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.041 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.018 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.034 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.012 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.028 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline POM has the plugin "maven-cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.030 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.022 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "cucumber-reporting" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline POM has the plugin "maven-cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.029 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline using "machine-learning-mlflow" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.024 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline's child POMs have a dependency on "cucumber-reporting" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline's child POMs has the plugin "maven-cucumber-reporting" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.058 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.029 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.052 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.070 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.067 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.057 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.006 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.053 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.026 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.020 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.026 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.058 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.054 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.049 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.046 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.094 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-spark" is generated + + 0.091 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.079 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.011 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark" is generated + + 0.074 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.134 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + A valid data-flow PySpark pipeline with a RDBMS ingest step + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipelines are validated + + 0.079 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the profile "data-delivery-pyspark-pipeline" is generated + + 0.052 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with the RDBMS persist type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_54_3859907491.html b/docs/report-feature_54_3859907491.html new file mode 100755 index 0000000..b801499 --- /dev/null +++ b/docs/report-feature_54_3859907491.html @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Dependency versions can be read in from maven properties. + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Dependency versions can be read in from maven properties.3000031010.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @dependencies +
+ + +
+ Feature + Dependency versions can be read in from maven properties. + + +
+ +
+ +
+ +
+ + +
+ Tags: + @dependencies +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the properties file has been properly filtered + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the spark dependency configuration is initialized + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + appropriate version information will be available + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_55_295727174.html b/docs/report-feature_55_295727174.html new file mode 100755 index 0000000..44f3927 --- /dev/null +++ b/docs/report-feature_55_295727174.html @@ -0,0 +1,507 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Generating deployments + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Generating deployments4000042020.029Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Generating deployments + + +
+ +
+ +
+ +
+ + + + + + 0.017 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DeploymentSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + the deployment "mlflow-deploy-v2" is generated + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the placeholder SealedSecret is created + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.011 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DeploymentSteps.setup(io.cucumber.java.Scenario) + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + the deployment "aissemble-spark-infrastructure-deploy-v2" is generated + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the placeholder SealedSecret is created + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_56_4087148730.html b/docs/report-feature_56_4087148730.html new file mode 100755 index 0000000..cbec33e --- /dev/null +++ b/docs/report-feature_56_4087148730.html @@ -0,0 +1,7314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Specify dictionary of semantically defined types + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Specify dictionary of semantically defined types1050000105350350.166Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @dictionary +
+ + +
+ Feature + Specify dictionary of semantically defined types + + +
+ +
+ +
+ +
+ + +
+ Tags: + @dictionary +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary described by "geoTypeDictionary", "com.boozallen.aiops.geospatial" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary is available can be looked up by the name "geoTypeDictionary" and "com.boozallen.aiops.geospatial" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary described by "cyberTypeDictionary", "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary is available can be looked up by the name "cyberTypeDictionary" and "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary described by "personTypeDictionary", "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary is available can be looked up by the name "personTypeDictionary" and "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.012 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary with the following types: + + 0.002 + +
+ + + + + + + + + + + + + + + + + + + + +
namesimpleType
ssnstring
ageinteger
+ + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dictionary returns the following types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
namesimpleType
ssnstring
ageinteger
+ + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary with the following types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
namesimpleType
ipAddressstring
portinteger
+ + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dictionary returns the following types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
namesimpleType
ipAddressstring
portinteger
+ + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary with the formats "^[0-9]{5}(?:-[0-9]{4})?$,^[A-Z]{5}$" + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the formats "^[0-9]{5}(?:-[0-9]{4})?$,^[A-Z]{5}$" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary with the formats "^[0-9]{5}$" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the formats "^[0-9]{5}$" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with empty string as a format + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that does not contains any formats + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation 1 and 5 + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the length validations 1 and 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation 5 and 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the length validations 5 and 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with min length validation 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the min length 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with min length validation 23 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the min length 23 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with max length validation 0 + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the max length 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with max length validation 23 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the max length 23 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation 10 and 8 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around length validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation 0 and -1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around length validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation -100 and 10 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around length validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "1" and "5" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the range validations "1" and "5" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.001 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "5.1" and "5.9" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the range validations "5.1" and "5.9" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "25" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around range validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "0.1" and "-2.0" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around range validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the scale 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of 3 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the scale 3 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of 10 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the scale 10 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of -1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around scale validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of -10 + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around scale validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with protection policy URN of "urn:com:boozallen:secrets:maskUnlessOwner" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the protection policy URN "urn:com:boozallen:secrets:maskUnlessOwner" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with protection policy URN of "urn:mil:dod:authorization:encrypt:unlessFiveEyes" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the protection policy URN "urn:mil:dod:authorization:encrypt:unlessFiveEyes" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with an empty protection policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains no protection policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with ethics policy URN of "urn:com:boozallen:ethics:genderDistribution" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the ethics policy URN "urn:com:boozallen:ethics:genderDistribution" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with ethics policy URN of "urn:gov:agency:bias:priviledgedDemographicBreakdown" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the ethics policy URN "urn:gov:agency:bias:priviledgedDemographicBreakdown" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with an empty ethics policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains no ethics policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with drift policy URN of "urn:com:boozallen:drift:withinTwoZScores" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the drift policy URN "urn:com:boozallen:drift:withinTwoZScores" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with drift policy URN of "urn:gov:agency:drift:fancyDriftApproachX" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the drift policy URN "urn:gov:agency:drift:fancyDriftApproachX" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with an empty drift policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains no drift policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_57_257357963.html b/docs/report-feature_57_257357963.html new file mode 100755 index 0000000..ffd481b --- /dev/null +++ b/docs/report-feature_57_257357963.html @@ -0,0 +1,715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Generating a docker module + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Generating a docker module120000123030.054Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @docker +
+ + +
+ Feature + Generating a docker module + + +
+ +
+ +
+ +
+ + +
+ Tags: + @docker +
+ + + 0.020 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a project named "docker-test-spark" with a source code url of "github.test.com/myProject" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using "data-delivery-spark" with data-lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the docker profile "aissemble-spark-worker-docker" is generated + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + my lineage property "data.lineage.producer" is set to "github.test.com/myProject" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @docker +
+ + + 0.018 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a project named "docker-test-pyspark" with a source code url of "github.test.com/myProject" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using "data-delivery-pyspark" with data-lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the docker profile "aissemble-spark-worker-docker" is generated + + 0.016 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + my lineage property "data.lineage.producer" is set to "github.test.com/myProject" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @docker +
+ + + 0.015 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a project named "docker-test-training" with a source code url of "github.test.com/myProject" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a machine-learning pipeline using "machine-learning-mlflow" with model-lineage enabled + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the docker profile "aissemble-training-docker" is generated + + 0.013 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + my lineage property "data.lineage.producer" is set to "github.test.com/myProject" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_58_83165716.html b/docs/report-feature_58_83165716.html new file mode 100755 index 0000000..2b98e0a --- /dev/null +++ b/docs/report-feature_58_83165716.html @@ -0,0 +1,825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Encrypting record fields + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Encrypting record fields8000082020.014Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @encryptfield +
+ + +
+ Feature + Encrypting record fields + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types are defined: + + 0.002 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @encryptfield +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.EncryptedFieldSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "ssn" as secure + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + encrypted records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and encrypted with the encryption policy "someEncryptID" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types are defined: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @encryptfield +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.EncryptedFieldSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "total_amount" as secure + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + encrypted records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and encrypted with the encryption policy "someEncryptID" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_59_1399534327.html b/docs/report-feature_59_1399534327.html new file mode 100755 index 0000000..398f0c1 --- /dev/null +++ b/docs/report-feature_59_1399534327.html @@ -0,0 +1,3280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Metamodel name translations + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Metamodel name translations51000051140140.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @nametranslation +
+ + +
+ Feature + Metamodel name translations + + +
+ +
This feature describes how metamodel names are translated to different formats based on their intended usage.
+ +
+ +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "UsgsPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "usgs_pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "USGSPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "usgs_pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "My123Pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "my123_pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "MyTESTPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "my_test_pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "MyPipelineTEST" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "my_pipeline_test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "UsgsPipeline" and a step named "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "UsgsPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "USGSPipeline" and a step named "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "USGSPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "My123Pipeline" and a step named "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "My123Pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark pipeline named "UsgsPipeline" and a step named "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Java class format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "UsgsPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark pipeline named "USGSPipeline" and a step named "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Java class format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "USGSPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark pipeline named "My123Pipeline" and a step named "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Java class format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "My123Pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "UsgsPipeline" and a step named "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Maven artifact ID format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated maven pipeline name is "usgs-pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the maven translated step name is "test-step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "USGSPipeline" and a step named "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Maven artifact ID format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated maven pipeline name is "usgs-pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the maven translated step name is "test-step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "My123Pipeline" and a step named "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Maven artifact ID format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated maven pipeline name is "my123-pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the maven translated step name is "my345-step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_5_1227621674.html b/docs/report-feature_5_1227621674.html new file mode 100755 index 0000000..8a41382 --- /dev/null +++ b/docs/report-feature_5_1227621674.html @@ -0,0 +1,425 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Example feature file + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Example feature file3000031010.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @pipeline +
+ + +
+ Feature + Example feature file + + +
+ +
Generated sample BDD specification/feature file - PLEASE ***DO*** MODIFY. + Originally generated from templates/cucumber.pipeline.feature.vm.
+ +
+ +
+ + +
+ Tags: + @pipeline +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a precondition + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an action occurs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a postcondition results + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.pattern.PipelineSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_60_2443039238.html b/docs/report-feature_60_2443039238.html new file mode 100755 index 0000000..af93c5c --- /dev/null +++ b/docs/report-feature_60_2443039238.html @@ -0,0 +1,8491 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Specify pipelines to be generated + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Specify pipelines to be generated1240000124410410.198Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @pipeline +
+ + +
+ Feature + Specify pipelines to be generated + + +
+ +
+ +
+ +
+ + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "dataDelivery", "com.boozallen.aiops.test", "data-flow", "versioned-streaming-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid pipeline is available can be looked up by the name "dataDelivery" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "dataDelivery", "com.boozallen.aiops.test", "data-flow", "versioned-streaming-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid pipeline is available can be looked up by the name "dataDelivery" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "neuralNetwork", "com.boozallen.aiops.test", "machine-learning", "default" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid pipeline is available can be looked up by the name "neuralNetwork" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "", "com.boozallen.aiops.test", "data-flow", "versioned-streaming-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "neuralNetwork", "", "machine-learning", "default" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "dataDelivery", "com.boozallen.aiops.test", "", "versioned-streaming-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "dataDelivery", "com.boozallen.aiops.test", "data-flow", "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline with 2 with the name "dataDelivery" and "com.boozallen.aiops.test" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + 2 are found in the pipeline when it is looked up by the name "dataDelivery" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline with 5 with the name "neuralNetwork" and "com.boozallen.aiops.test" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + 5 are found in the pipeline when it is looked up by the name "neuralNetwork" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step name "" and type "transform" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step name "FooIngestStep" and type "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing an unspecified persist type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with a step containing a specified persist mode + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with the specified persist mode + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing an unspecified inbound type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipelinewith a step containing an unspecified outbound type + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a configuration item with key "" and value "blah" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a configuration item with key "foo" and value "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with provenance configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with the default provenance creation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with provenance disabled + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created without including provenance creation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with a step that has no explicit alerting + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline step is created with alerting enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with a step that has alerting disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline step is created with alerting disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a pipeline is configured for messaging without a channel name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline and a valid data flow pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + data flow artifact ids are requested + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + only the data flow artifact ids are retrieved + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline and a valid data flow pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + data flow artifact ids are requested + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + step artifact ids for data flow are retrieved + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline and a valid data flow pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + data flow artifact ids are requested + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + step artifact ids for machine learning are retrieved + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with versioning + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with versioning disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created without versioning + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + platforms are specified for a pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with the specified platforms + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline and a valid data flow pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + data flow artifact ids are requested + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the machine learning pipeline yields mlflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the data flow pipeline does not yield mlflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid data delivery pipeline with lineage undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with lineage disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid data delivery pipeline with lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with data profiling undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning pipelines are validated + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created without data profiling + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with data profiling set to true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning pipelines are validated + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with data profiling set to false + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning pipelines are validated + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with a training step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning artifact ids are requested + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the machine learning pipeline does not yield airflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning training pipeline with an airflow executionHelper + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning artifact ids are requested + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the machine learning pipeline yields airflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with an airflow executionHelper and no training step + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning artifact ids are requested + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the machine learning pipeline does not yield airflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with a training step + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the training step is created with modelLineage disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with a training step and modelLineage is enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the training step is created with modelLineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid machine learning pipeline with data lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + there are validation error messages + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid data delivery pipeline with a step that has model lineage defined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + there are validation error messages + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_61_2978080901.html b/docs/report-feature_61_2978080901.html new file mode 100755 index 0000000..31c1123 --- /dev/null +++ b/docs/report-feature_61_2978080901.html @@ -0,0 +1,1027 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Specify post-actions to be generated + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Specify post-actions to be generated120000124040.018Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @postAction +
+ + +
+ Feature + Specify post-actions to be generated + + +
+ +
+ +
+ +
+ + +
+ Tags: + @postAction +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a post-action with name "" and type "blah" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipeline with post-actions is read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception due to invalid post-action metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @postAction +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a post-action with name "foo" and type "" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipeline with post-actions is read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception due to invalid post-action metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @postAction +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a model-conversion post-action with model source "" and model target "blah" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipeline with post-actions is read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown due to missing post-action metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @postAction +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a model-conversion post-action with model source "foo" and model target "" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipeline with post-actions is read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown due to missing post-action metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_62_2444692509.html b/docs/report-feature_62_2444692509.html new file mode 100755 index 0000000..7e01870 --- /dev/null +++ b/docs/report-feature_62_2444692509.html @@ -0,0 +1,1411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Minimum Python version can be set in the pyproject.toml.vm files. + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Minimum Python version can be set in the pyproject.toml.vm files.240000246060.265Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Minimum Python version can be set in the pyproject.toml.vm files. + + +
+ +
+ +
+ +
+ + + + + + 0.068 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.011 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using the "data-delivery-pyspark" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "data-delivery-pyspark-pipeline" is generated + + 0.064 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-combined-data-records-python" is generated + + 0.030 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.030 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-data-records-core-python" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.024 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-data-pyspark" is generated + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.040 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline with step type "training" using the "machine-learning-mlflow" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "machine-learning-training" is generated + + 0.038 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.068 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline with step type "inference" using the "machine-learning-mlflow" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "machine-learning-inference" is generated + + 0.066 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_63_348107189.html b/docs/report-feature_63_348107189.html new file mode 100755 index 0000000..9dbbd77 --- /dev/null +++ b/docs/report-feature_63_348107189.html @@ -0,0 +1,13569 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Specify record of semantically defined types + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Specify record of semantically defined types1740000174430430.312Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @record +
+ + +
+ Feature + Specify record of semantically defined types + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record described by "FinancialTransction", "com.boozallen.aiops.finanicial" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available can be looked up by the name "FinancialTransction" and "com.boozallen.aiops.finanicial" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record described by "NetFlowRecord", "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available can be looked up by the name "NetFlowRecord" and "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record described by "UserProfile", "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available can be looked up by the name "UserProfile" and "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a description "This is a description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with a description of "This is a description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.011 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.005 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a description "This record represents a User Profile." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with a description of "This record represents a User Profile." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with the fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
firstName
lastName
+ + + + + + + + + +
+
+ + +
+ When + records are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
firstName
lastName
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.013 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.015 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with the fields named: + + 0.008 + +
+ + + + + + + + + + + + + + +
city
state
+ + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
city
state
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.014 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.012 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with the fields named: + + 0.001 + +
+ + + + + + + + + + + + + + +
cidr
ip
+ + + + + + + + + +
+
+ + +
+ When + records are read + + 0.013 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
cidr
ip
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has a description "This is a record field description." + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a description of "This is a record field description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has a description "This record field represents the SSN of a user." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a description of "This record field represents the SSN of a user." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a simple type of "string" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "singleSlaInDays" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a simple type of "decimal" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a simple type of "boolean" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "binarydata" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a simple type of "byte[]" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.005 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "ssn" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a column name of "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.002 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.018 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.011 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "total_amount" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a column name of "total_amount" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "field_is_archivable" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a column name of "field_is_archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.012 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column is required + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and marked as required + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.010 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.006 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column as optional + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and marked as optional + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.018 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a protection policy of "hashValuePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.009 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "phoneNumber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a protection policy of "hashValuePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "singleSlaInDays" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no protection policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.015 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no protection policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.013 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" and a protection policy of "hashAllButLastFourOfSsnPolicy" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a protection policy of "hashAllButLastFourOfSsnPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "phoneNumber" and a protection policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a protection policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a ethics policy of "sampleMinimumPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "gender" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a ethics policy of "genderDistributionPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no ethics policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "phoneNumber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no ethics policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" and a ethics policy of "archiveOlderThanSixMonthsPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a ethics policy of "archiveOlderThanSixMonthsPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.001 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "gender" and a ethics policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a ethics policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "singleSlaInDays" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a drift policy of "oneZScorePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "doubleSlaInDays" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a drift policy of "twoZScoresPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no drift policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no drift policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "singleSlaInDays" and a drift policy of "oneZScorePlusAveragePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a drift policy of "oneZScorePlusAveragePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "doubleSlaInDays" and a drift policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a drift policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite named "Address" with multiple fields + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record with a field that has a field with a composite type of "Address" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a field with a composite type of "Address" containing multiple fields + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite named "Leaf" with multiple fields + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record with a field that has a field with a composite type of "Leaf" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a field with a composite type of "Leaf" containing multiple fields + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid record with data access configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record is available and has data access enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid record with data access disabled + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record is available and has data access disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.008 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid record with pyspark support + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read for a Python project + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record is available and has Pyspark support enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following dictionary types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namesimpleTypeprotectionPolicydriftPolicyethicsPolicy
ssnstringhashValuePolicy
phoneNumberstringhashValuePolicy
singleSlaInDaysdecimaloneZScorePolicy
doubleSlaInDaysdecimaltwoZScoresPolicy
archivablebooleansampleMinimumPolicy
genderstringgenderDistributionPolicy
binarydatabyte[]
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid record with no pyspark support + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read for a Python project + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record is available and has Pyspark support disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_64_794660781.html b/docs/report-feature_64_794660781.html new file mode 100755 index 0000000..4c6ef0a --- /dev/null +++ b/docs/report-feature_64_794660781.html @@ -0,0 +1,898 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Generating spark application pipeline resources + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Generating spark application pipeline resources150000153030.235Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Generating spark application pipeline resources + + +
+ +
+ +
+ +
+ + + + + + 0.088 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a file store named "s3TestModelOne" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.085 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.071 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.069 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "aren't" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.075 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + two file stores named "s3TestModelOne" and "s3TestModelTwo" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.073 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "s3TestModelTwo_FS_PROVIDER", "s3TestModelTwo_FS_ACCESS_KEY_ID", and "s3TestModelTwo_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_65_909504347.html b/docs/report-feature_65_909504347.html new file mode 100755 index 0000000..9607678 --- /dev/null +++ b/docs/report-feature_65_909504347.html @@ -0,0 +1,2661 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Configure and Execute Mediation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Configure and Execute Mediation38000038100100.003Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Configure and Execute Mediation + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid mediation routine is available for the intersection of "json" and "json" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid mediation routine is available for the intersection of "bronze-v2" and "bronze-v3" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid mediation routine is NOT available for the intersection of "silver-v1" and "gold-v2" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid mediation routine is NOT available for the intersection of "foo" and "????" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the mediator is invoked for input "json" and output "json" values "log this" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the input is transformed to "log this" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the mediator is invoked for input "bronze-v2" and output "bronze-v3" values "DO NOT CHANGE ME" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the input is transformed to "DO NOT CHANGE ME" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the mediator is invoked for input "mixed-case-string" and output "lower-case-string" values "I LoVe mIxEd CAse" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the input is transformed to "i love mixed case" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the mediator is invoked for input "no match" and output "reflective" values "pass this through" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the input is transformed to "pass this through" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the mediator is invoked for input "anything" and output "never-gonna-happen" values "input theater" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a graceful exception case is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the following mediation configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
inputTypeoutputTypeclassName
jsonjsondata_transform_core.mediator.LoggingMediator
bronze-v2bronze-v3data_transform_core.mediator.LoggingMediator
silver-v1gold-v2data_transform_core.mediator.DoesNotExistMediator
mixed-case-stringlower-case-stringtest_mediators.LowercaseMediator
anythingnever-gonna-happentest_mediators.ExceptionalMediator
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mediator with "string", "string", and "test_mediators.PropertyAwareMediator" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the following properties + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
propertyAfoo
propertyBbar
+ + + + + + + + + +
+
+ + +
+ When + mediation is configured for runtime + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the mediator is invoked for input "string" and output "string" values "SOMETHING" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the input is transformed to "foo-SOMETHING-bar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_66_2707998939.html b/docs/report-feature_66_2707998939.html new file mode 100755 index 0000000..56981f7 --- /dev/null +++ b/docs/report-feature_66_2707998939.html @@ -0,0 +1,738 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Messaging -&gt; CDI Configuration + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Messaging -> CDI Configuration9000093030.418Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @cdiConfiguration +
+ + +
+ Feature + Messaging -> CDI Configuration + + +
+ +
As a developer, I need to be able to configure instances of a CDI container
+ +
+ +
+ + +
+ Tags: + @cdiConfiguration +
+ + + 0.368 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I registered a "com.boozallen.aissemble.messaging.example.ACdiComponent" in the CDI configuration + + 0.152 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the container is initialized + + 0.209 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "com.boozallen.aissemble.messaging.example.ACdiComponent" can be found in the CDI container + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.tearDown() + + 0.002 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @cdiConfiguration +
+ + + 0.027 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I registered a "com.boozallen.aissemble.messaging.example.AnotherCdiComponent" in the CDI configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the container is initialized + + 0.024 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "com.boozallen.aissemble.messaging.example.AnotherCdiComponent" can be found in the CDI container + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @cdiConfiguration +
+ + + 0.022 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I registered a list of classes in the CDI configuration + + 0.001 + +
+ + + + + + + + + + + + + + +
com.boozallen.aissemble.messaging.example.ACdiComponent
com.boozallen.aissemble.messaging.example.AnotherCdiComponent
+ + + + + + + + + +
+
+ + +
+ When + the container is initialized + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the classes can be found in the CDI container + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_67_1886511388.html b/docs/report-feature_67_1886511388.html new file mode 100755 index 0000000..86f0432 --- /dev/null +++ b/docs/report-feature_67_1886511388.html @@ -0,0 +1,1027 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Configure messaging topics and channels + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Configure messaging topics and channels120000124040.755Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @configure +
+ + +
+ Feature + Configure messaging topics and channels + + +
+ +
+ +
+ +
+ + +
+ Tags: + @configure +
+ + + 0.755 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ConfigurationSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the messaging library to connect to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging service starts + + 0.754 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service creates a new emitter for "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ConfigurationSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @configure +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ConfigurationSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the messaging library to connect to 3 topics + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service creates an emitter for each topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ConfigurationSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @configure +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ConfigurationSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the messaging library to connect to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service creates a new listener for "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ConfigurationSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @configure +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ConfigurationSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the messaging library to connect to 4 topics + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service creates an listener for each topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ConfigurationSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_68_2005685886.html b/docs/report-feature_68_2005685886.html new file mode 100755 index 0000000..1630e79 --- /dev/null +++ b/docs/report-feature_68_2005685886.html @@ -0,0 +1,1447 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Receive messages through the messaging service + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Receive messages through the messaging service200000205050.008Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @receive-message +
+ + +
+ Feature + Receive messages through the messaging service + + +
+ +
+ +
+ +
+ + +
+ Tags: + @receive-message +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is sent to the topic + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the message is processed successfully by the consumer + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an ack is sent to broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setupNackMessageTest() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a message is sent to the topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + consumer failed to process the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a nack is sent to broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.resetConnector() + + 0.000 + +
+ + + + + + + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the manual ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is received from the topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service does not ack or nack the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the manual ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer "ack" the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "ack" is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the manual ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer "nack" the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "nack" is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_69_2919427863.html b/docs/report-feature_69_2919427863.html new file mode 100755 index 0000000..5d832a7 --- /dev/null +++ b/docs/report-feature_69_2919427863.html @@ -0,0 +1,657 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Send messages through the messaging service + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Send messages through the messaging service6000062020.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @send +
+ + +
+ Feature + Send messages through the messaging service + + +
+ +
+ +
+ +
+ + +
+ Tags: + @send +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.SendMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicA" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a message is sent to to the topic "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.SubscribeSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ After + com.boozallen.aissemble.messaging.python.SendMessageSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @send +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.SendMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicD" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown saying the topic was not found + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.SubscribeSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ After + com.boozallen.aissemble.messaging.python.SendMessageSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_6_1147081753.html b/docs/report-feature_6_1147081753.html new file mode 100755 index 0000000..e8ddf25 --- /dev/null +++ b/docs/report-feature_6_1147081753.html @@ -0,0 +1,1404 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Example record with required string field and validated string field + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Example record with required string field and validated string field210000217070.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+
+ + +
+ Feature + Example record with required string field and validated string field + + +
+ +
+ +
+ +
+ + +
+ Tags: + @validatedField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpValidation() + + 0.045 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for validated field: "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a field that requires a minimum length of 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @validatedField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpValidation() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for validated field: "null" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a field that requires a minimum length of 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @validatedField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpValidation() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for validated field: "x" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a field that requires a minimum length of 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @validatedField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpValidation() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for validated field: "xxxxx" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a field that requires a minimum length of 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: false + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @requiredField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpRequired() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for a required field: "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a required field + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @requiredField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpRequired() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for a required field: "null" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a required field + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @requiredField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpRequired() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for a required field: "x" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a required field + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: false + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_70_1253645552.html b/docs/report-feature_70_1253645552.html new file mode 100755 index 0000000..5066f01 --- /dev/null +++ b/docs/report-feature_70_1253645552.html @@ -0,0 +1,615 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Subscribe to a channel listener through the messaging service + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Subscribe to a channel listener through the messaging service8000082020.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @subscribe +
+ + +
+ Feature + Subscribe to a channel listener through the messaging service + + +
+ +
+ +
+ +
+ + +
+ Tags: + @subscribe +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.SubscribeSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a messaging topic "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid callback and ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the service creates a subscription to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service is subscribed to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @subscribe +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.SubscribeSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a messaging topic "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid callback and ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the service creates a subscription to "TopicD" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown saying the topic does not exist + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_71_3893931962.html b/docs/report-feature_71_3893931962.html new file mode 100755 index 0000000..fd830b0 --- /dev/null +++ b/docs/report-feature_71_3893931962.html @@ -0,0 +1,521 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Enqueue messages through the python client + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Enqueue messages through the python client7000072021.762Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @queue + @IntegrationTest +
+ + +
+ Feature + Enqueue messages through the python client + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.819 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" exists in the service + + 0.134 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicA" + + 0.684 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I receive a Future object for my queued message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.943 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" exists in the service + + 0.141 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a messaging topic named "TopicD" does not exist in the service + + 0.128 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicD" + + 0.672 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I receive a NoTopicSupportedError instead of a Future + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_72_3540758248.html b/docs/report-feature_72_3540758248.html new file mode 100755 index 0000000..1f46365 --- /dev/null +++ b/docs/report-feature_72_3540758248.html @@ -0,0 +1,1172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: client-server integration + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
client-server integration230000236065.529Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @IntegrationTest +
+ + +
+ Feature + client-server integration + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.918 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic "TopicA" that exists in the service + + 0.145 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging client subscribes to "TopicA" + + 0.772 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the messaging client confirms the subscription to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.901 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic "TopicA" that exists in the service + + 0.136 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a messaging topic "TopicD" that does not exist in the service + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging client subscribes to "TopicD" + + 0.765 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I receive a NoTopicSupportedError + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.932 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.919 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the MANUAL strategy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is sent to the topic + + 0.008 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message is processed successfully by the consumer + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.921 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.906 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the POSTPROCESSING strategy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is sent to the topic + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message is processed successfully by the consumer + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.927 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.909 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the MANUAL strategy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer ack the message + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ack is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + 0.928 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.914 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the MANUAL strategy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer nack the message + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the nack is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_73_3983013774.html b/docs/report-feature_73_3983013774.html new file mode 100755 index 0000000..1749399 --- /dev/null +++ b/docs/report-feature_73_3983013774.html @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Alerting -&gt; Publish and Subscribe + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Alerting -> Publish and Subscribe3000031010.017Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @alerting +
+ + +
+ Feature + Alerting -> Publish and Subscribe + + +
+ +
As the system, I can subscribe to alerts on a topic.
+ +
+ +
+ + +
+ Tags: + @alerting +
+ + + 0.017 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.alerting.core.AlertingSteps.setUp() + + 0.480 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I am subscribed to the alert topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an alert is published to the topic + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I can see the details of the alert + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.alerting.core.AlertingSteps.tearDown() + + 0.002 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_74_3171037600.html b/docs/report-feature_74_3171037600.html new file mode 100755 index 0000000..a2e4336 --- /dev/null +++ b/docs/report-feature_74_3171037600.html @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: The correct status is returned depending on the state of the system when metadata is retrieved + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
The correct status is returned depending on the state of the system when metadata is retrieved3000031014.751Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @metadata +
+ + +
+ Feature + The correct status is returned depending on the state of the system when metadata is retrieved + + +
+ +
I want to have the system return the correct status code depending on the state of the system
+ +
+ +
+ + +
+ Tags: + @metadata +
+ + + 4.751 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.metadata.PipelineSteps.setUp() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a populated metadata table + + 4.306 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the getMetadata endpoint is called + + 0.444 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + return a 200 status code + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.metadata.PipelineSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_75_2309312465.html b/docs/report-feature_75_2309312465.html new file mode 100755 index 0000000..3a4af20 --- /dev/null +++ b/docs/report-feature_75_2309312465.html @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Data Transform -&gt; Data transformation using a policy + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Data Transform -> Data transformation using a policy3000031011.403Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @dataTransform +
+ + +
+ Feature + Data Transform -> Data transformation using a policy + + +
+ +
+ +
+ +
+ + +
+ Tags: + @dataTransform +
+ + + 1.403 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.data.transform.DataTransformSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a data transform policy has been configured + + 0.046 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is applied on a dataset + + 1.355 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dataset is transformed using the rule specified in the policy + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.data.transform.DataTransformSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_76_216510772.html b/docs/report-feature_76_216510772.html new file mode 100755 index 0000000..5c87542 --- /dev/null +++ b/docs/report-feature_76_216510772.html @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Data Transform -&gt; Data transformation using a policy + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Data Transform -> Data transformation using a policy3000031012.772Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @dataTransform +
+ + +
+ Feature + Data Transform -> Data transformation using a policy + + +
+ +
+ +
+ +
+ + +
+
+ + + 2.772 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a data transform policy has been configured + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is applied on a dataset + + 2.755 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dataset is transformed using the rule specified in the policy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_77_132837459.html b/docs/report-feature_77_132837459.html new file mode 100755 index 0000000..c66bad8 --- /dev/null +++ b/docs/report-feature_77_132837459.html @@ -0,0 +1,1195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Pipeline messaging steps can be configured + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Pipeline messaging steps can be configured180000184040.023Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @data-delivery + @messaging +
+ + +
+ Feature + Pipeline messaging steps can be configured + + +
+ +
I want to configure how messaging steps connect to external systems without being tied to the internal details of the + generated step classes.
+ +
+ +
+ + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.017 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 1.465 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with outgoing and incoming messaging + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + messages flow from the external system + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the messaging to the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration directs the step result to the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.011 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 0.044 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with incoming messaging + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + messages flow from the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the messaging to the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 0.039 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with outgoing messaging + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the step is executed + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the step result to the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 0.033 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with override configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + messages flow from the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the messaging to the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration directs the step result to the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_78_2457387545.html b/docs/report-feature_78_2457387545.html new file mode 100755 index 0000000..120c3a3 --- /dev/null +++ b/docs/report-feature_78_2457387545.html @@ -0,0 +1,400 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Object store credentials can be verified for read and write access + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Object store credentials can be verified for read and write access2000021010.005Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Object store credentials can be verified for read and write access + + +
+ +
I want to use configured credentials to connect to an object store and + verify read and write access
+ +
+ +
+ + + + + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.setUp() + + 0.352 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a properties file exists + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the credentials are used to verify object store connectivity + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_79_2561494426.html b/docs/report-feature_79_2561494426.html new file mode 100755 index 0000000..4f3ccfa --- /dev/null +++ b/docs/report-feature_79_2561494426.html @@ -0,0 +1,439 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: SparkSession creation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
SparkSession creation4000042023.330Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @testutils +
+ + +
+ Feature + SparkSession creation + + +
+ +
+ +
+ +
+ + +
+
+ + + 3.321 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a configured spark session is requested for unit testing + + 3.045 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an appropriately configured session can be retrieved + + 0.276 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+
+ + + 0.009 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a configured spark session with no unsafe line is requested for unit testing + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an appropriately configured session can be retrieved + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_7_1704432389.html b/docs/report-feature_7_1704432389.html new file mode 100755 index 0000000..a71bb79 --- /dev/null +++ b/docs/report-feature_7_1704432389.html @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Placeholder test + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Placeholder test2000021010.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @training +
+ + +
+ Feature + Placeholder test + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_80_1787878218.html b/docs/report-feature_80_1787878218.html new file mode 100755 index 0000000..70390a3 --- /dev/null +++ b/docs/report-feature_80_1787878218.html @@ -0,0 +1,6814 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Specify custom attributes + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Specify custom attributes1170000117390390.725Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @attributes +
+ + +
+ Feature + Specify custom attributes + + +
+ +
+ +
+ +
+ + +
+ Tags: + @attributes +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "string" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#string" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "boolean" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#boolean" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "anyUri" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#anyURI" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "uri" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#anyURI" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "date" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#date" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "int" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#integer" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "integer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#integer" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "double" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#double" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.700 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "tonyGwynn" + + 0.695 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "scoreGoal" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "anthonyRizzo" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "wallyJoyner" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "wadeBoggs" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "kirbyPuckett" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_81_2383550879.html b/docs/report-feature_81_2383550879.html new file mode 100755 index 0000000..6111381 --- /dev/null +++ b/docs/report-feature_81_2383550879.html @@ -0,0 +1,6138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Specify authorization policies + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Specify authorization policies1050000105350350.003Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @authorization +
+ + +
+ Feature + Specify authorization policies + + +
+ +
+ +
+ +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource "hit/single" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource "hit/single" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource "hit/single" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource "spike/ball" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "scoreGoal" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "anthonyRizzo" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "wallyJoyner" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "wadeBoggs" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "kirbyPuckett" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_82_3993744635.html b/docs/report-feature_82_3993744635.html new file mode 100755 index 0000000..ab74019 --- /dev/null +++ b/docs/report-feature_82_3993744635.html @@ -0,0 +1,1331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Create JSON Web Tokens based on PDP rules + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Create JSON Web Tokens based on PDP rules130000136060.141Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @jwtToken +
+ + +
+ Feature + Create JSON Web Tokens based on PDP rules + + +
+ +
+ +
+ +
+ + +
+ Tags: + @jwtToken +
+ + + 0.055 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "tonyGwynn" and "petco park fans" + + 0.039 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the token contains claims for "tonyGwynn", "petco park fans", and "CN=aissemble, OU=boozallen, O=boozallen, L=DC, ST=DC, C=US" + + 0.015 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @jwtToken +
+ + + 0.016 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "trevorHoffman" and "fans that stuck it out to the end of the game" + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the token contains claims for "trevorHoffman", "fans that stuck it out to the end of the game", and "CN=aissemble, OU=boozallen, O=boozallen, L=DC, ST=DC, C=US" + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @jwtToken +
+ + + 0.032 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "tonyGwynn" and "unitTest" + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the following claims: + + 0.011 + +
+ + + + + + + + + + + + + + + + + + + + + + + +
nameresourceaction
canSinglehit/single
canStrikeoutstrikeout
+ + + + + + + + + +
+
+ + +
+ Then + a claim is returned with the following rule and decision pairings: + + 0.010 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
nameresourceactionresult
canSinglehit/singlePERMIT
canStrikeoutstrikeoutDENY
+ + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @jwtToken +
+ + + 0.021 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "tonyGwynn" with an attribute value claim for seasons batting over .350 + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a claim is returned with the attributes "1984, 1987, 1993, 1994, 1995, 1996, 1997" + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @jwtToken +
+ + + 0.010 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "reggieJackson" with an attribute value claim for seasons batting over .350 + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a claim is returned with the attributes "" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @jwtToken +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "kirbyPuckett" with an attribute value claim for seasons batting over .350 + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a claim is returned with the attributes "1988" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_83_3276506490.html b/docs/report-feature_83_3276506490.html new file mode 100755 index 0000000..fa5fd66 --- /dev/null +++ b/docs/report-feature_83_3276506490.html @@ -0,0 +1,534 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Convert data element to hash + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Convert data element to hash5000052020.057Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @hashing +
+ + +
+ Feature + Convert data element to hash + + +
+ +
+ +
+ +
+ + +
+ Tags: + @hashing +
+ + + 0.033 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a data element is provided + + 0.032 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a hash is generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.encryption.HashingSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + +
+ Tags: + @hashing +
+ + + 0.024 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a data element is provided + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the data element is encrypted + + 0.023 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + decrypting it will return the original value + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.encryption.HashingSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_84_1508648878.html b/docs/report-feature_84_1508648878.html new file mode 100755 index 0000000..2e56f5b --- /dev/null +++ b/docs/report-feature_84_1508648878.html @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Encryption + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Encryption3000031010.005Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @properties +
+ + +
+ Feature + Encryption + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a plain text string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the string is encrypted using AES encryption + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the encrypted string can be decrypted using AES + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_85_1117850475.html b/docs/report-feature_85_1117850475.html new file mode 100755 index 0000000..f1dc504 --- /dev/null +++ b/docs/report-feature_85_1117850475.html @@ -0,0 +1,397 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Alerting -&gt; Slack notifications + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Alerting -> Slack notifications2000021010.779Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @alerting +
+ + +
+ Feature + Alerting -> Slack notifications + + +
+ +
As the system, I can send alerts to a configured slack channel
+ +
+ +
+ + +
+ Tags: + @alerting +
+ + + 0.779 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.alerting.slack.SlackAlertingSteps.setUp() + + 0.425 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + an alert is sent to slack + + 0.777 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the alert is sent to the configured slack channel successfully + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.alerting.slack.SlackAlertingSteps.tearDown() + + 0.002 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_86_3988161628.html b/docs/report-feature_86_3988161628.html new file mode 100755 index 0000000..f86a058 --- /dev/null +++ b/docs/report-feature_86_3988161628.html @@ -0,0 +1,1429 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Require a certain helm version to be installed when building aiSSEMBLE + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Require a certain helm version to be installed when building aiSSEMBLE180000186060.013Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Require a certain helm version to be installed when building aiSSEMBLE + + +
+ +
+ +
+ +
+ + + + + + 0.010 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.193 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.11.3" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.12.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is flagged + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.12.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.12.1" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "2.12.1" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.10.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.12.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.12.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is NOT flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.12.1" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.10.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is NOT flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.10.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "2.12.2" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is NOT flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_8_68740289.html b/docs/report-feature_8_68740289.html new file mode 100755 index 0000000..a28891e --- /dev/null +++ b/docs/report-feature_8_68740289.html @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Placeholder test + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Placeholder test2000021010.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + +
+ Feature + Placeholder test + + +
+ +
+ +
+ +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-feature_9_1227621674.html b/docs/report-feature_9_1227621674.html new file mode 100755 index 0000000..576ddb8 --- /dev/null +++ b/docs/report-feature_9_1227621674.html @@ -0,0 +1,425 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Feature: Example feature file + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Feature Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
FeaturePassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
Example feature file3000031010.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ +
+ Tags: + @pipeline +
+ + +
+ Feature + Example feature file + + +
+ +
Generated sample BDD specification/feature file - PLEASE ***DO*** MODIFY. + Originally generated from templates/cucumber.pipeline.feature.vm.
+ +
+ +
+ + +
+ Tags: + @pipeline +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.basic.PipelineSteps.setUp() + + 0.001 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a precondition + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an action occurs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a postcondition results + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.basic.PipelineSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1015512771.html b/docs/report-tag_1015512771.html new file mode 100755 index 0000000..a95bd90 --- /dev/null +++ b/docs/report-tag_1015512771.html @@ -0,0 +1,1192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @messaging + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@messaging180000184040.023Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.017 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 1.465 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with outgoing and incoming messaging + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + messages flow from the external system + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the messaging to the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration directs the step result to the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.011 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 0.044 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with incoming messaging + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + messages flow from the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the messaging to the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 0.039 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with outgoing messaging + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the step is executed + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the step result to the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 0.033 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with override configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + messages flow from the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the messaging to the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration directs the step result to the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_103602359.html b/docs/report-tag_103602359.html new file mode 100755 index 0000000..3439b98 --- /dev/null +++ b/docs/report-tag_103602359.html @@ -0,0 +1,3783 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @code-generation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@code-generation77000077160160.765Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.042 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-combined-data-records" is generated + + 0.039 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.049 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-combined-data-records-python" is generated + + 0.046 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.020 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-records-core-java" is generated + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.031 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-records-core-python" is generated + + 0.028 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.016 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-spark" is generated + + 0.013 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.032 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-pyspark" is generated + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pyproject.toml file has a dependency on "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.070 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.067 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.068 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.011 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using the "data-delivery-pyspark" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "data-delivery-pyspark-pipeline" is generated + + 0.064 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-combined-data-records-python" is generated + + 0.030 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.030 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-data-records-core-python" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.024 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-data-pyspark" is generated + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.040 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline with step type "training" using the "machine-learning-mlflow" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "machine-learning-training" is generated + + 0.038 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.068 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline with step type "inference" using the "machine-learning-mlflow" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "machine-learning-inference" is generated + + 0.066 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.088 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a file store named "s3TestModelOne" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.085 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.071 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.069 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "aren't" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.075 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + two file stores named "s3TestModelOne" and "s3TestModelTwo" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.073 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "s3TestModelTwo_FS_PROVIDER", "s3TestModelTwo_FS_ACCESS_KEY_ID", and "s3TestModelTwo_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1053334888.html b/docs/report-tag_1053334888.html new file mode 100755 index 0000000..cdd5882 --- /dev/null +++ b/docs/report-tag_1053334888.html @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @dependencies + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@dependencies3000031010.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @dependencies +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the properties file has been properly filtered + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the spark dependency configuration is initialized + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + appropriate version information will be available + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1055767110.html b/docs/report-tag_1055767110.html new file mode 100755 index 0000000..7f24539 --- /dev/null +++ b/docs/report-tag_1055767110.html @@ -0,0 +1,6482 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @composite + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@composite1080000108360360.280Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.055 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.189 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite described by "Address", "com.boozallen.aiops.location" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.052 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available can be looked up by the name "Address" and "com.boozallen.aiops.location" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite described by "NetFlowRecord", "com.boozallen.aiops.cyber" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available can be looked up by the name "NetFlowRecord" and "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite described by "UserProfile", "com.boozallen.aiops.person" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available can be looked up by the name "UserProfile" and "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a description "This is a description." + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with a description of "This is a description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a description "This composite represents a User Profile." + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with a description of "This composite represents a User Profile." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.015 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with the fields named: + + 0.002 + +
+ + + + + + + + + + + + + + +
number
street
+ + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with fields named: + + 0.007 + +
+ + + + + + + + + + + + + + +
number
street
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with the fields named: + + 0.001 + +
+ + + + + + + + + + + + + + +
airportCode
arrivalTime
+ + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
airportCode
arrivalTime
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with the fields named: + + 0.001 + +
+ + + + + + + + + + + + + + +
balls
strikes
+ + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid composite is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
balls
strikes
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has a description "This is a composite field description." + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a description of "This is a composite field description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has a description "This composite field represents the SSN of a user." + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a description of "This composite field represents the SSN of a user." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a simple type of "string" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "airportCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a simple type of "string" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a simple type of "integer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column name "street_name" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a column name of "street_name" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column name "airport_code" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a column name of "airport_code" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column name "COUNT" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available with a column name of "COUNT" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column is required + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and marked as required + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field specifying the column as optional + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and marked as optional + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a protection policy of "obfuscatePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "zipCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a protection policy of "obfuscatePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "airportCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no protection policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no protection policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" and a protection policy of "encryptPolicy" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a protection policy of "encryptPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "zipCode" and a protection policy of "stripExtendedZipCodePolicy" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a protection policy of "stripExtendedZipCodePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a ethics policy of "sampleMinimumPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "stateOfOrigin" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a ethics policy of "inStateUnivserityDistributionPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no ethics policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "airportCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no ethics policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" and a ethics policy of "archiveOlderThanNiceMonthsPolicy" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a ethics policy of "archiveOlderThanNiceMonthsPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "stateOfOrigin" and a ethics policy of "noOpPolicy" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a ethics policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "airportCode" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a drift policy of "profileOutOfStandardRangePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "milesFromHome" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a drift policy of "fiveMileZonePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "streetName" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no drift policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "zipCode" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a no drift policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "count" and a drift policy of "noOpPolicy" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a drift policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @composite +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.CompositeSteps.setUpObjectMapper() + + 0.006 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite with a field that has dictionary type named "stateOfOrigin" and a drift policy of "tenMileExpandedZonePolicy" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + composites are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the composite field is available and has a drift policy of "tenMileExpandedZonePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1056078597.html b/docs/report-tag_1056078597.html new file mode 100755 index 0000000..0173bde --- /dev/null +++ b/docs/report-tag_1056078597.html @@ -0,0 +1,3319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @nametranslation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@nametranslation51000051140140.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "UsgsPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "usgs_pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "USGSPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "usgs_pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "My123Pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "my123_pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "MyTESTPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "my_test_pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "MyPipelineTEST" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python package format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline name is "my_pipeline_test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "UsgsPipeline" and a step named "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "UsgsPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "USGSPipeline" and a step named "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "USGSPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "My123Pipeline" and a step named "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Python format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "My123Pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark pipeline named "UsgsPipeline" and a step named "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Java class format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "UsgsPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark pipeline named "USGSPipeline" and a step named "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Java class format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "USGSPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark pipeline named "My123Pipeline" and a step named "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Java class format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated pipeline class name is "My123Pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the translated step class name is "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "UsgsPipeline" and a step named "TestStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Maven artifact ID format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated maven pipeline name is "usgs-pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the maven translated step name is "test-step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "USGSPipeline" and a step named "TESTStep" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Maven artifact ID format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated maven pipeline name is "usgs-pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the maven translated step name is "test-step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @nametranslation +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline named "My123Pipeline" and a step named "My345Step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the names are translated to Maven artifact ID format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the translated maven pipeline name is "my123-pipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the maven translated step name is "my345-step" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.NameTranslationSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1173533342.html b/docs/report-tag_1173533342.html new file mode 100755 index 0000000..c79f03e --- /dev/null +++ b/docs/report-tag_1173533342.html @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @dataEncryptionPolicy + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@dataEncryptionPolicy3000031010.005Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a data encryption policy has been persisted to file + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy contains encryption information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1180706285.html b/docs/report-tag_1180706285.html new file mode 100755 index 0000000..ace966e --- /dev/null +++ b/docs/report-tag_1180706285.html @@ -0,0 +1,733 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @cdiConfiguration + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@cdiConfiguration9000093030.418Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @cdiConfiguration +
+ + + 0.368 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I registered a "com.boozallen.aissemble.messaging.example.ACdiComponent" in the CDI configuration + + 0.152 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the container is initialized + + 0.209 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "com.boozallen.aissemble.messaging.example.ACdiComponent" can be found in the CDI container + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.tearDown() + + 0.002 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @cdiConfiguration +
+ + + 0.027 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I registered a "com.boozallen.aissemble.messaging.example.AnotherCdiComponent" in the CDI configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the container is initialized + + 0.024 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "com.boozallen.aissemble.messaging.example.AnotherCdiComponent" can be found in the CDI container + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @cdiConfiguration +
+ + + 0.022 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I registered a list of classes in the CDI configuration + + 0.001 + +
+ + + + + + + + + + + + + + +
com.boozallen.aissemble.messaging.example.ACdiComponent
com.boozallen.aissemble.messaging.example.AnotherCdiComponent
+ + + + + + + + + +
+
+ + +
+ When + the container is initialized + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the classes can be found in the CDI container + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.core.CdiConfigurationSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1295720222.html b/docs/report-tag_1295720222.html new file mode 100755 index 0000000..5f147ba --- /dev/null +++ b/docs/report-tag_1295720222.html @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @testutils + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@testutils4000042023.330Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + SparkSession creation +
+ + +
+
+ + + 3.321 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a configured spark session is requested for unit testing + + 3.045 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an appropriately configured session can be retrieved + + 0.276 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + SparkSession creation +
+ + +
+
+ + + 0.009 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a configured spark session with no unsafe line is requested for unit testing + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an appropriately configured session can be retrieved + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1434588790.html b/docs/report-tag_1434588790.html new file mode 100755 index 0000000..dc62774 --- /dev/null +++ b/docs/report-tag_1434588790.html @@ -0,0 +1,1371 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @data-delivery + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@data-delivery200000205050.028Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.017 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 1.465 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with outgoing and incoming messaging + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + messages flow from the external system + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the messaging to the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration directs the step result to the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.011 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 0.044 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with incoming messaging + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + messages flow from the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the messaging to the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 0.039 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with outgoing messaging + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the step is executed + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the step result to the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @data-delivery + @messaging +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.setUp() + + 0.033 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a step with override configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pipeline configuration for the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + messages flow from the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration directs the messaging to the step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration directs the step result to the external system + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.MessagingConfigurationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.setUp() + + 0.352 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a properties file exists + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the credentials are used to verify object store connectivity + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1450874259.html b/docs/report-tag_1450874259.html new file mode 100755 index 0000000..13fe2e0 --- /dev/null +++ b/docs/report-tag_1450874259.html @@ -0,0 +1,1436 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @enforce-helm-version + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@enforce-helm-version180000186060.013Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.010 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.193 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.11.3" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.12.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is flagged + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.12.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.12.1" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "2.12.1" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.10.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.12.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.12.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is NOT flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.12.1" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "3.10.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is NOT flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm version "3.10.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the required helm version is "2.12.2" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version is NOT flagged + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.maven.enforcer.EnforceHelmVersionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1651092133.html b/docs/report-tag_1651092133.html new file mode 100755 index 0000000..8e65861 --- /dev/null +++ b/docs/report-tag_1651092133.html @@ -0,0 +1,1026 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @configure + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@configure120000124040.755Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @configure +
+ + + 0.755 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ConfigurationSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the messaging library to connect to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging service starts + + 0.754 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service creates a new emitter for "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ConfigurationSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @configure +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ConfigurationSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the messaging library to connect to 3 topics + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service creates an emitter for each topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ConfigurationSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @configure +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ConfigurationSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the messaging library to connect to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service creates a new listener for "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ConfigurationSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @configure +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ConfigurationSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the messaging library to connect to 4 topics + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service creates an listener for each topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ConfigurationSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1786658399.html b/docs/report-tag_1786658399.html new file mode 100755 index 0000000..d04642a --- /dev/null +++ b/docs/report-tag_1786658399.html @@ -0,0 +1,710 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @docker + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@docker120000123030.054Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @docker +
+ + + 0.020 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a project named "docker-test-spark" with a source code url of "github.test.com/myProject" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using "data-delivery-spark" with data-lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the docker profile "aissemble-spark-worker-docker" is generated + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + my lineage property "data.lineage.producer" is set to "github.test.com/myProject" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @docker +
+ + + 0.018 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a project named "docker-test-pyspark" with a source code url of "github.test.com/myProject" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using "data-delivery-pyspark" with data-lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the docker profile "aissemble-spark-worker-docker" is generated + + 0.016 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + my lineage property "data.lineage.producer" is set to "github.test.com/myProject" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @docker +
+ + + 0.015 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a project named "docker-test-training" with a source code url of "github.test.com/myProject" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a machine-learning pipeline using "machine-learning-mlflow" with model-lineage enabled + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the docker profile "aissemble-training-docker" is generated + + 0.013 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + my lineage property "data.lineage.producer" is set to "github.test.com/myProject" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1909816829.html b/docs/report-tag_1909816829.html new file mode 100755 index 0000000..66a1528 --- /dev/null +++ b/docs/report-tag_1909816829.html @@ -0,0 +1,4125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @policyBasedConfigurations + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@policyBasedConfigurations84000084260260.096Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.084 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 1 rules + + 0.081 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with the deprecated target attribute + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a rule within a policy has been configured without a class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the rule is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has no valid rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid policy exists + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the policy specifies a target + + 0.000 + +
+ + + + + + + + + + + + + + + + +
retrieveUrltype
http://mydata/lives/hererest
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the target type is set as "rest" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the target's retrieve url is set as "http://mydata/lives/here" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy exists with the following targets: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
retrieveUrltype
http://getdata1.comrest1
http://getdata2.comrest2
+ + + + + + + + + +
+
+ + +
+ And + a policy rule specifies the target configurations: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
myQueryParammyDataName
count10
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configured targets are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the class "MyCalculator" with the following configurations: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
mean25.07
standardDeviation3.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 1 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with the deprecated target attribute + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a rule within a policy has been configured without a class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the rule is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has no valid rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid policy exists + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the policy specifies a target + + 0.000 + +
+ + + + + + + + + + + + + + + + +
retrieveUrltype
http://mydata/lives/hererest
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the target type is set as "rest" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the target's retrieve url is set as "http://mydata/lives/here" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy exists with the following targets + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
retrieveUrltype
http://getdata1.comrest1
http://getdata2.comrest2
+ + + + + + + + + +
+
+ + +
+ And + a policy rule specifies the target configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
myQueryParammyDataName
count10
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configured targets are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the class "MyCalculator" with the following configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
mean25.07
standardDeviation3.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_1984510830.html b/docs/report-tag_1984510830.html new file mode 100755 index 0000000..68d2659 --- /dev/null +++ b/docs/report-tag_1984510830.html @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @metadata + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@metadata3000031014.751Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @metadata +
+ + + 4.751 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.metadata.PipelineSteps.setUp() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a populated metadata table + + 4.306 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the getMetadata endpoint is called + + 0.444 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + return a 200 status code + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.metadata.PipelineSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2034880750.html b/docs/report-tag_2034880750.html new file mode 100755 index 0000000..1034822 --- /dev/null +++ b/docs/report-tag_2034880750.html @@ -0,0 +1,1783 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @detectDriftStandardScore + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@detectDriftStandardScore260000267070.026Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.034 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "52.0" using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.029 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "57.99999" using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.032 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "53.98, 52.009, 56.3, 57.651" using the policy + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.026 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "51.999" using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.024 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "58.0001" using the policy + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.027 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "55, 56.12, 52, 52.14, 51.75" using the policy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.025 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift is detected on a input + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the flagged value will be included in the result + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2062445281.html b/docs/report-tag_2062445281.html new file mode 100755 index 0000000..85a3196 --- /dev/null +++ b/docs/report-tag_2062445281.html @@ -0,0 +1,9048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @pipeline + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@pipeline1300000130430430.200Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Example feature file +
+ + +
+ Tags: + @pipeline +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a precondition + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an action occurs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a postcondition results + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.pattern.PipelineSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Example feature file +
+ + +
+ Tags: + @pipeline +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.basic.PipelineSteps.setUp() + + 0.001 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a precondition + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an action occurs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a postcondition results + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.basic.PipelineSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "dataDelivery", "com.boozallen.aiops.test", "data-flow", "versioned-streaming-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid pipeline is available can be looked up by the name "dataDelivery" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "dataDelivery", "com.boozallen.aiops.test", "data-flow", "versioned-streaming-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid pipeline is available can be looked up by the name "dataDelivery" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "neuralNetwork", "com.boozallen.aiops.test", "machine-learning", "default" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid pipeline is available can be looked up by the name "neuralNetwork" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "", "com.boozallen.aiops.test", "data-flow", "versioned-streaming-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "neuralNetwork", "", "machine-learning", "default" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "dataDelivery", "com.boozallen.aiops.test", "", "versioned-streaming-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline described by "dataDelivery", "com.boozallen.aiops.test", "data-flow", "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline with 2 with the name "dataDelivery" and "com.boozallen.aiops.test" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + 2 are found in the pipeline when it is looked up by the name "dataDelivery" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline with 5 with the name "neuralNetwork" and "com.boozallen.aiops.test" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + 5 are found in the pipeline when it is looked up by the name "neuralNetwork" and "com.boozallen.aiops.test" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step name "" and type "transform" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step name "FooIngestStep" and type "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing an unspecified persist type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with a step containing a specified persist mode + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with the specified persist mode + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing an unspecified inbound type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipelinewith a step containing an unspecified outbound type + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a configuration item with key "" and value "blah" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a configuration item with key "foo" and value "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception about invalid metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with provenance configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with the default provenance creation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with provenance disabled + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created without including provenance creation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with a step that has no explicit alerting + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline step is created with alerting enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid pipeline with a step that has alerting disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline step is created with alerting disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a pipeline is configured for messaging without a channel name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline and a valid data flow pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + data flow artifact ids are requested + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + only the data flow artifact ids are retrieved + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline and a valid data flow pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + data flow artifact ids are requested + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + step artifact ids for data flow are retrieved + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline and a valid data flow pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + data flow artifact ids are requested + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + step artifact ids for machine learning are retrieved + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with versioning + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with versioning disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created without versioning + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + platforms are specified for a pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with the specified platforms + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline and a valid data flow pipeline + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + data flow artifact ids are requested + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the machine learning pipeline yields mlflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the data flow pipeline does not yield mlflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid data delivery pipeline with lineage undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with lineage disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid data delivery pipeline with lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with data profiling undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning pipelines are validated + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created without data profiling + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with data profiling set to true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning pipelines are validated + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with data profiling set to false + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning pipelines are validated + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with a training step + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning artifact ids are requested + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the machine learning pipeline does not yield airflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning training pipeline with an airflow executionHelper + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning artifact ids are requested + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the machine learning pipeline yields airflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with an airflow executionHelper and no training step + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + machine learning artifact ids are requested + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the machine learning pipeline does not yield airflow artifacts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with a training step + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the training step is created with modelLineage disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid machine learning pipeline with a training step and modelLineage is enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the training step is created with modelLineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid machine learning pipeline with data lineage enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + there are validation error messages + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @pipeline +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid data delivery pipeline with a step that has model lineage defined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + pipelines are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + there are validation error messages + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PipelineSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2149488615.html b/docs/report-tag_2149488615.html new file mode 100755 index 0000000..060e512 --- /dev/null +++ b/docs/report-tag_2149488615.html @@ -0,0 +1,6078 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @cdi + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@cdi86000086280280.420Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.113 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.348 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy with one rule configured to use the standard deviation algorithm + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the rule specifies a mean and standard deviation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked using the policy + + 0.111 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation will use the specified mean and standard deviation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.002 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.040 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy with one rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the rule specifies a mean and standard deviation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked using control data and the policy + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation will use the mean and standard deviation calculated from the control data + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.038 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + the zScore is not configured by a rule + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the zScore is set to 1 by default + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.031 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy with one rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the rule specifies a zScore + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation will use the zScore configured by the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.034 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "52.0" using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.029 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "57.99999" using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.032 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "53.98, 52.009, 56.3, 57.651" using the policy + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.026 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "51.999" using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.024 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "58.0001" using the policy + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.027 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the algorithm has a configured mean of 55, standard deviation of 3, and zScore of 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked on "55, 56.12, 52, 52.14, 51.75" using the policy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + input whose values fall outside the upper bound of 58 and lower bound 52 will be flagged for drift + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detected is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.025 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift is detected on a input + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the flagged value will be included in the result + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @singleRule + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.024 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy and a single input + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + drift detection is run on the single input using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @singleRule + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy and a list of inputs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + drift detection is run on the list of inputs using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @singleRule + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.024 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy, a single input, and control data + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the control data is used to set the metrics for the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detection is run on the single input using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @singleRule + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy, a list of inputs, and control data + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the control data is used to set the metrics for the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detection is run on the list of inputs using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.022 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + an alert is sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the alert is published to an "alerts" topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.018 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been defined with no alert configuration + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "no drift is detected" using the policy specified + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is sent that "no drift is detected" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.020 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been defined with no alert configuration + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is sent that "drift is detected" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.016 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to only send alerts when drift is detected + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "no drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert "is not" sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to only send alerts when drift is detected + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert "is" sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to never send alerts + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "no drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is not sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.021 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to never send alerts + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is not sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @withoutConsole + @cdi +
+ + + 0.093 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.noConsole() + + 0.390 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the event is emitted via messaging + + 0.093 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is sent over the outbound channel + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @cdi +
+ + + 0.064 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the ConsoleTransport class is added to the CDI container + + 0.061 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the event is emitted via messaging + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is received for logging to the console + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @withoutConsole + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.noConsole() + + 0.044 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the event is emitted via messaging + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is not received for logging to the console + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @cdi +
+ + + 0.042 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a configuration that opts into console emission + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the CDI container is created with automatically selected context + + 0.041 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConsoleTransport class is available + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @cdi +
+ + + 0.048 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a configuration that opts out of console emission + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the CDI container is created with automatically selected context + + 0.045 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConsoleTransport class is not available + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2154082493.html b/docs/report-tag_2154082493.html new file mode 100755 index 0000000..0591c23 --- /dev/null +++ b/docs/report-tag_2154082493.html @@ -0,0 +1,3581 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @config-loader + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@config-loader56000056150150.522Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.352 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + URIs pointing to valid base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configuration service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are loaded into the configuration store + + 0.342 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the configurations were loaded successfully + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration service records the that the given configurations were loaded successfully + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.019 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + URIs pointing to valid base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration service records the that the given configurations were loaded successfully + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configuration service starts again + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration service skips the loading process + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + notifies the user that the configurations were previously loaded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.021 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the properties are loaded + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConfigLoader validates the URI and its contents + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + consumes the base properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + augments the base with the environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.022 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the configuration service has started + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + requests a configuration property + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the property value is returned + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.049 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.049 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConfigLoader consumes the base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the environment policy overrides the base policy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "targets" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "targets-retrieve-url" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "rules" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "rules-classname" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "regeneration-method" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a URI pointing to a policy with a undefined "regeneration-method-classname" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a policy attribute is undefined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to policies targeting the same property + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown stating a property cannot be targeted by multiple policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + there exists a krausening_password and encrypted properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configuration service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the loaded properties contains the decrypted value + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.027 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the config loader to configured to use "krausening" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the properties are loaded + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configurations are written + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the properties can be read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @config-loader +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the config loader to configured to use "inMemory" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the properties are loaded + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configurations are written + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the properties can be read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2178235536.html b/docs/report-tag_2178235536.html new file mode 100755 index 0000000..e18cd35 --- /dev/null +++ b/docs/report-tag_2178235536.html @@ -0,0 +1,7747 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @record + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@record1310000131430430.268Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record described by "FinancialTransction", "com.boozallen.aiops.finanicial" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available can be looked up by the name "FinancialTransction" and "com.boozallen.aiops.finanicial" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record described by "NetFlowRecord", "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available can be looked up by the name "NetFlowRecord" and "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record described by "UserProfile", "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available can be looked up by the name "UserProfile" and "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a description "This is a description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with a description of "This is a description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.011 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.005 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a description "This record represents a User Profile." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with a description of "This record represents a User Profile." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with the fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
firstName
lastName
+ + + + + + + + + +
+
+ + +
+ When + records are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
firstName
lastName
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.013 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.015 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with the fields named: + + 0.008 + +
+ + + + + + + + + + + + + + +
city
state
+ + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
city
state
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.014 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.012 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with the fields named: + + 0.001 + +
+ + + + + + + + + + + + + + +
cidr
ip
+ + + + + + + + + +
+
+ + +
+ When + records are read + + 0.013 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid record is available with fields named: + + 0.000 + +
+ + + + + + + + + + + + + + +
cidr
ip
+ + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has a description "This is a record field description." + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a description of "This is a record field description." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has a description "This record field represents the SSN of a user." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a description of "This record field represents the SSN of a user." + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a simple type of "string" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "singleSlaInDays" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a simple type of "decimal" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a simple type of "boolean" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "binarydata" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a simple type of "byte[]" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.005 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "ssn" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a column name of "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.018 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.011 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "total_amount" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a column name of "total_amount" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "field_is_archivable" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available with a column name of "field_is_archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.012 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column is required + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and marked as required + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.010 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.006 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column as optional + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and marked as optional + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.018 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a protection policy of "hashValuePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.009 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "phoneNumber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a protection policy of "hashValuePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "singleSlaInDays" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no protection policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.015 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no protection policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.013 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" and a protection policy of "hashAllButLastFourOfSsnPolicy" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a protection policy of "hashAllButLastFourOfSsnPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "phoneNumber" and a protection policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a protection policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a ethics policy of "sampleMinimumPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "gender" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a ethics policy of "genderDistributionPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no ethics policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "phoneNumber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no ethics policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" and a ethics policy of "archiveOlderThanSixMonthsPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a ethics policy of "archiveOlderThanSixMonthsPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.001 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "gender" and a ethics policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a ethics policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "singleSlaInDays" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a drift policy of "oneZScorePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "doubleSlaInDays" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a drift policy of "twoZScoresPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "ssn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no drift policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "archivable" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a no drift policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "singleSlaInDays" and a drift policy of "oneZScorePlusAveragePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a drift policy of "oneZScorePlusAveragePolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field that has dictionary type named "doubleSlaInDays" and a drift policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a drift policy of "noOpPolicy" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite named "Address" with multiple fields + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record with a field that has a field with a composite type of "Address" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a field with a composite type of "Address" containing multiple fields + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a composite named "Leaf" with multiple fields + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record with a field that has a field with a composite type of "Leaf" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and has a field with a composite type of "Leaf" containing multiple fields + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid record with data access configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record is available and has data access enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid record with data access disabled + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record is available and has data access disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.008 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid record with pyspark support + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read for a Python project + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record is available and has Pyspark support enabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @record +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.RecordSteps.setUpObjectMapper() + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid record with no pyspark support + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + records are read for a Python project + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record is available and has Pyspark support disabled + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2180660594.html b/docs/report-tag_2180660594.html new file mode 100755 index 0000000..427f1f4 --- /dev/null +++ b/docs/report-tag_2180660594.html @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @properties + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@properties3000031010.005Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Encryption +
+ + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a plain text string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the string is encrypted using AES encryption + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the encrypted string can be decrypted using AES + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2207562106.html b/docs/report-tag_2207562106.html new file mode 100755 index 0000000..3803ba3 --- /dev/null +++ b/docs/report-tag_2207562106.html @@ -0,0 +1,882 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @calculateBounds + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@calculateBounds160000164040.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 30, a standard deviation of 2, and a zScore 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 32 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be 28 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 0.05, a standard deviation of 0.01, and a zScore 2 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 0.07 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be 0.03 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 1, a standard deviation of 2, and a zScore 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 3 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be -1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 0, a standard deviation of 4, and a zScore 1.5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 6 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be -6 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2210115527.html b/docs/report-tag_2210115527.html new file mode 100755 index 0000000..1b99199 --- /dev/null +++ b/docs/report-tag_2210115527.html @@ -0,0 +1,648 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @send + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@send6000062020.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @send +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.SendMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicA" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a message is sent to to the topic "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.SubscribeSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ After + com.boozallen.aissemble.messaging.python.SendMessageSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @send +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.SendMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicD" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown saying the topic was not found + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.SubscribeSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ After + com.boozallen.aissemble.messaging.python.SendMessageSteps.cleanupMessaging() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2210183619.html b/docs/report-tag_2210183619.html new file mode 100755 index 0000000..3dac651 --- /dev/null +++ b/docs/report-tag_2210183619.html @@ -0,0 +1,8094 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @unit + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@unit1690000169530530.195Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 30, a standard deviation of 2, and a zScore 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 32 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be 28 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 0.05, a standard deviation of 0.01, and a zScore 2 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 0.07 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be 0.03 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 1, a standard deviation of 2, and a zScore 1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 3 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be -1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @calculateBounds + @unit +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a mean of 0, a standard deviation of 4, and a zScore 1.5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the bounds for drift detection are calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the upper bound is determined to be 6 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the lower bound is determined to be -6 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 1 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + the configured policies reference an algorithm "StandardDeviation" by class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the algorithm from "com.boozallen.drift.detection.algorithm.StandardDeviationDriftAlgorithm" is used + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + the configured policies reference an algorithm "MyDriftAlgorithm" by class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the algorithm from "com.boozallen.drift.detection.algorithm.MyDriftAlgorithm" is used + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + the configured policies reference an algorithm "com.different.company.algorithm.CustomDriftAlgorithm" by class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the algorithm from "com.different.company.algorithm.CustomDriftAlgorithm" is used + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the algorithm "StandardDeviation" with the following configurations: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
mean25.07
standardDeviation3.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the algorithm "StandardDeviation" with the following configurations: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
standardDeviation2.5
zScore2
+ + + + + + + + + +
+
+ + +
+ And + the policy rule specifies a target of "myColumn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the target is set as "myColumn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses an algorithm with the following unrecognized configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
aMadeUpSetting50.0
notRelevantSetting1.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the unrecognized configurations are ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy with multiple rules + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for drift service detection + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.007 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + multiple json files exist, each with a configured policy + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the files + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the multiple json files are available for drift service detection + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured without an identifier + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is not added + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with multiple policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the file + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the file are available for drift service detection + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.084 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 1 rules + + 0.081 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with the deprecated target attribute + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a rule within a policy has been configured without a class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the rule is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has no valid rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid policy exists + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the policy specifies a target + + 0.000 + +
+ + + + + + + + + + + + + + + + +
retrieveUrltype
http://mydata/lives/hererest
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the target type is set as "rest" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the target's retrieve url is set as "http://mydata/lives/here" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy exists with the following targets: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
retrieveUrltype
http://getdata1.comrest1
http://getdata2.comrest2
+ + + + + + + + + +
+
+ + +
+ And + a policy rule specifies the target configurations: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
myQueryParammyDataName
count10
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configured targets are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the class "MyCalculator" with the following configurations: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
mean25.07
standardDeviation3.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.045 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy with multiple rules + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.019 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.008 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + multiple json files exist, each with a configured policy + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the files + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the multiple json files are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured without an identifier + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is not added + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with multiple policies + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the file + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the file are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 1 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with the deprecated target attribute + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding targets + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a rule within a policy has been configured without a class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the rule is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has no valid rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid policy exists + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the policy specifies a target + + 0.000 + +
+ + + + + + + + + + + + + + + + +
retrieveUrltype
http://mydata/lives/hererest
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the target type is set as "rest" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the target's retrieve url is set as "http://mydata/lives/here" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy exists with the following targets + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
retrieveUrltype
http://getdata1.comrest1
http://getdata2.comrest2
+ + + + + + + + + +
+
+ + +
+ And + a policy rule specifies the target configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
myQueryParammyDataName
count10
+ + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configured targets are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the class "MyCalculator" with the following configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
mean25.07
standardDeviation3.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy with multiple rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy using the deprecated target attribute + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the policy has the deprecated target in the new targets attribute + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + multiple json files exist, each with a configured policy + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the files + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the multiple json files are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured without an identifier + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is not added + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with multiple policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the file are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2245788895.html b/docs/report-tag_2245788895.html new file mode 100755 index 0000000..818f4aa --- /dev/null +++ b/docs/report-tag_2245788895.html @@ -0,0 +1,498 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @deployment-generation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@deployment-generation4000042020.029Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Generating deployments +
+ + + + + + 0.017 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DeploymentSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + the deployment "mlflow-deploy-v2" is generated + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the placeholder SealedSecret is created + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Generating deployments +
+ + + + + + 0.011 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DeploymentSteps.setup(io.cucumber.java.Scenario) + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + the deployment "aissemble-spark-infrastructure-deploy-v2" is generated + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the placeholder SealedSecret is created + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2307663156.html b/docs/report-tag_2307663156.html new file mode 100755 index 0000000..d6a0a1b --- /dev/null +++ b/docs/report-tag_2307663156.html @@ -0,0 +1,1036 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @model_lineage + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@model_lineage200000205050.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a source code facet with a specified type, URL and path + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the job is updated with the source code facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the job retains the properties of the source code facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a Hyperparameter facet with a specificied parameter and value + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the run is updated with the Hyperparameter facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the run retains the properties of the Hyperparameter facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a MLflowRunFacet is defined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the run is updated with the MLflowRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the run retains the properties of the MLflowRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a HardwareDetailsRunFacet is defined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the run is updated with the HardwareDetailsRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the run retains the properties of the HardwareDetailsRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model lineage run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a PerformanceMetricRunFacet is defined + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the run is updated with the PerformanceMetricRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the run retains the properties of the PerformanceMetricRunFacet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2319563519.html b/docs/report-tag_2319563519.html new file mode 100755 index 0000000..5193b4c --- /dev/null +++ b/docs/report-tag_2319563519.html @@ -0,0 +1,1030 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @detectAckType + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@detectAckType120000124040.054Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.052 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.206 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.001 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_exceptional_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to NACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an exception occurs during message processing + + 0.051 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is NACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_exceptional_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to DROP + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an exception occurs during message processing + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is ACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_successful_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to NACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + message processing occurs successfully + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is ACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_successful_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to DROP + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + message processing occurs successfully + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is ACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2355135623.html b/docs/report-tag_2355135623.html new file mode 100755 index 0000000..7b473ca --- /dev/null +++ b/docs/report-tag_2355135623.html @@ -0,0 +1,1870 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @asynchronous + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@asynchronous38000038110110.062Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.012 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and void outbound type is defined + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and native outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and void outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and native outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and native outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2373081817.html b/docs/report-tag_2373081817.html new file mode 100755 index 0000000..f6eaf9d --- /dev/null +++ b/docs/report-tag_2373081817.html @@ -0,0 +1,618 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @successful + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@successful6000062020.002Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_successful_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to NACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + message processing occurs successfully + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is ACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_successful_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to DROP + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + message processing occurs successfully + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is ACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2436226121.html b/docs/report-tag_2436226121.html new file mode 100755 index 0000000..a66e3fb --- /dev/null +++ b/docs/report-tag_2436226121.html @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @versioning + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@versioning3000031010.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Versioning +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a model has been trained + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I version the trained model + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the model artifacts are packaged and deployed + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2491591471.html b/docs/report-tag_2491591471.html new file mode 100755 index 0000000..9de2db5 --- /dev/null +++ b/docs/report-tag_2491591471.html @@ -0,0 +1,3461 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @outbound + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@outbound69000069240240.128Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.012 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and void outbound type is defined + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and native outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and void outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and native outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and native outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and void outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no outbound return type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no outbound return type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2598937476.html b/docs/report-tag_2598937476.html new file mode 100755 index 0000000..cf733c8 --- /dev/null +++ b/docs/report-tag_2598937476.html @@ -0,0 +1,1662 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @lineage_types + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@lineage_types26000026130130.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a RunEvent is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public RunEvent fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Job is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public Job fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Job is instantiated with a non-string name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Facet is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public Facet fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Facet is instantiated with an illegal schema_url + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Dataset is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public Dataset fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Dataset is instantiated with a non-string name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an InputDataset is instantiated with an illegal input_facet dict + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an OutputDataset is instantiated with an illegal output_facet dict + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Run is instantiated with minimal valid arguments + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all public Run fields will contain appropriate values + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a Run is instantiated with a non-UUID run_id + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a lineage object is instantiated with a facet dict containing an illegal value + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Lineage Object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a lineage object is instantiated with a facet dict containing an illegal key + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a ValueError will be raised during the construction of the Lineage Object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2617993442.html b/docs/report-tag_2617993442.html new file mode 100755 index 0000000..dee4fa1 --- /dev/null +++ b/docs/report-tag_2617993442.html @@ -0,0 +1,6023 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @pipeline-generation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@pipeline-generation1320000132240241.340Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.039 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.030 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "example-data-records" + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.041 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.018 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.034 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.012 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.028 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline POM has the plugin "maven-cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.030 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.022 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "cucumber-reporting" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline POM has the plugin "maven-cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.029 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline using "machine-learning-mlflow" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.024 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline's child POMs have a dependency on "cucumber-reporting" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline's child POMs has the plugin "maven-cucumber-reporting" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.058 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.029 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.052 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.070 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.067 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.057 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.006 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.053 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.026 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.020 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.026 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.058 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.054 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.049 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.046 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.094 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-spark" is generated + + 0.091 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.079 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.011 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark" is generated + + 0.074 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.134 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + A valid data-flow PySpark pipeline with a RDBMS ingest step + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipelines are validated + + 0.079 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the profile "data-delivery-pyspark-pipeline" is generated + + 0.052 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with the RDBMS persist type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.068 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.011 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using the "data-delivery-pyspark" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "data-delivery-pyspark-pipeline" is generated + + 0.064 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-combined-data-records-python" is generated + + 0.030 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.030 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-data-records-core-python" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.024 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-data-pyspark" is generated + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.040 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline with step type "training" using the "machine-learning-mlflow" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "machine-learning-training" is generated + + 0.038 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.068 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline with step type "inference" using the "machine-learning-mlflow" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "machine-learning-inference" is generated + + 0.066 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.088 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a file store named "s3TestModelOne" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.085 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.071 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.069 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "aren't" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.075 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + two file stores named "s3TestModelOne" and "s3TestModelTwo" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.073 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "s3TestModelTwo_FS_PROVIDER", "s3TestModelTwo_FS_ACCESS_KEY_ID", and "s3TestModelTwo_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2715732947.html b/docs/report-tag_2715732947.html new file mode 100755 index 0000000..d2a01be --- /dev/null +++ b/docs/report-tag_2715732947.html @@ -0,0 +1,525 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @hashing + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@hashing5000052020.057Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @hashing +
+ + + 0.033 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a data element is provided + + 0.032 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a hash is generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.encryption.HashingSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @hashing +
+ + + 0.024 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a data element is provided + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the data element is encrypted + + 0.023 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + decrypting it will return the original value + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.encryption.HashingSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2731264660.html b/docs/report-tag_2731264660.html new file mode 100755 index 0000000..270afa4 --- /dev/null +++ b/docs/report-tag_2731264660.html @@ -0,0 +1,488 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @encryptPolicies + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@encryptPolicies6000062020.242Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @encryptPolicies +
+ + + 0.241 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy that contains a list of encrypt fields + + 0.239 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for field encryption + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @encryptPolicies +
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy that specifies an algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available with the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2765899832.html b/docs/report-tag_2765899832.html new file mode 100755 index 0000000..3bf8221 --- /dev/null +++ b/docs/report-tag_2765899832.html @@ -0,0 +1,6261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @authorization + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@authorization1050000105350350.003Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource "hit/single" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource "hit/single" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource "hit/single" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource "spike/ball" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "scoreGoal" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "anthonyRizzo" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "wallyJoyner" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "wadeBoggs" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @authorization +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "kirbyPuckett" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2897414661.html b/docs/report-tag_2897414661.html new file mode 100755 index 0000000..6780a6b --- /dev/null +++ b/docs/report-tag_2897414661.html @@ -0,0 +1,1641 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @driftConfigurations + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@driftConfigurations29000029100100.008Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 1 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 1 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 2 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 2 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 4 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 4 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured with 6 rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy has 6 corresponding rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + the configured policies reference an algorithm "StandardDeviation" by class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the algorithm from "com.boozallen.drift.detection.algorithm.StandardDeviationDriftAlgorithm" is used + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + the configured policies reference an algorithm "MyDriftAlgorithm" by class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the algorithm from "com.boozallen.drift.detection.algorithm.MyDriftAlgorithm" is used + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + the configured policies reference an algorithm "com.different.company.algorithm.CustomDriftAlgorithm" by class name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the algorithm from "com.different.company.algorithm.CustomDriftAlgorithm" is used + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the algorithm "StandardDeviation" with the following configurations: + + 0.001 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
mean25.07
standardDeviation3.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses the algorithm "StandardDeviation" with the following configurations: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
standardDeviation2.5
zScore2
+ + + + + + + + + +
+
+ + +
+ And + the policy rule specifies a target of "myColumn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are available to the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the target is set as "myColumn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy rule that uses an algorithm with the following unrecognized configurations + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
keyvalue
aMadeUpSetting50.0
notRelevantSetting1.0
+ + + + + + + + + +
+
+ + +
+ When + the policy rule is read in + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the unrecognized configurations are ignored + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2900739572.html b/docs/report-tag_2900739572.html new file mode 100755 index 0000000..946b3e9 --- /dev/null +++ b/docs/report-tag_2900739572.html @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @encryptfield + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@encryptfield6000062020.009Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Encrypting record fields +
+ + +
+ Tags: + @encryptfield +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.EncryptedFieldSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "ssn" as secure + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + encrypted records are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and encrypted with the encryption policy "someEncryptID" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Encrypting record fields +
+ + +
+ Tags: + @encryptfield +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.EncryptedFieldSteps.setUpObjectMapper() + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a record with a field specifying the column name "total_amount" as secure + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + encrypted records are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the record field is available and encrypted with the encryption policy "someEncryptID" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2970363145.html b/docs/report-tag_2970363145.html new file mode 100755 index 0000000..23b4944 --- /dev/null +++ b/docs/report-tag_2970363145.html @@ -0,0 +1,606 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @subscribe + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@subscribe8000082020.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @subscribe +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.SubscribeSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a messaging topic "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid callback and ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the service creates a subscription to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service is subscribed to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @subscribe +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.SubscribeSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a messaging topic "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid callback and ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the service creates a subscription to "TopicD" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is thrown saying the topic does not exist + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_2980880317.html b/docs/report-tag_2980880317.html new file mode 100755 index 0000000..0a9874c --- /dev/null +++ b/docs/report-tag_2980880317.html @@ -0,0 +1,1535 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @calculateStandardDeviation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@calculateStandardDeviation27000027100100.155Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.150 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "45, 48, 52, 57" + + 0.145 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the mean is calculated + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the mean is 50.5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "-4, -2, 0, 1, 3" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the mean is calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the mean is -0.4 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "0.25, 2, 0.75" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the mean is calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the mean is 1.0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "3, 4, 3, 2, 3, 4" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a calculated mean of 3.166667 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the standard deviation is calculated + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation is 0.752773 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "2, 1, 55, 56, 57, 98, 99" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a calculated mean of 52.571429 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the standard deviation is calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation is 39.736034 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a set of control data "-10.1, -8.99, -1.02, 1.78, 3.2" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a calculated mean of -3.026 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the standard deviation is calculated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation is 6.154176 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a calculated number 3.14159265 is rounded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the number is rounded 3.141593 using the HALF EVEN rounding method and last 6 digits + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a calculated number 1.66666666667 is rounded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the number is rounded 1.666667 using the HALF EVEN rounding method and last 6 digits + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a calculated number 9219.65434521 is rounded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the number is rounded 9219.654345 using the HALF EVEN rounding method and last 6 digits + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3002544189.html b/docs/report-tag_3002544189.html new file mode 100755 index 0000000..ec2a529 --- /dev/null +++ b/docs/report-tag_3002544189.html @@ -0,0 +1,1145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @configureStandardDeviation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@configureStandardDeviation140000145050.123Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.113 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.348 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy with one rule configured to use the standard deviation algorithm + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the rule specifies a mean and standard deviation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked using the policy + + 0.111 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation will use the specified mean and standard deviation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.002 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.040 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy with one rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the rule specifies a mean and standard deviation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked using control data and the policy + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation will use the mean and standard deviation calculated from the control data + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.038 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + the zScore is not configured by a rule + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the zScore is set to 1 by default + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.031 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy with one rule configured to use the standard deviation algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the rule specifies a zScore + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + drift detection is invoked using the policy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the standard deviation will use the zScore configured by the rule + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3106110887.html b/docs/report-tag_3106110887.html new file mode 100755 index 0000000..adf1703 --- /dev/null +++ b/docs/report-tag_3106110887.html @@ -0,0 +1,438 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @data-lineage + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@data-lineage4000041010.130Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @data-lineage +
+ + + 0.130 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.LineageTest.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a pipeline run is created + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline has the step name Ingest + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the step lineage run event is created + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step lineage run event's parent run is the pipeline run + + 0.121 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.pattern.LineageTest.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3239414571.html b/docs/report-tag_3239414571.html new file mode 100755 index 0000000..e9273eb --- /dev/null +++ b/docs/report-tag_3239414571.html @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @config-webhook + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@config-webhook6000061010.151Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @config-webhook +
+ + + 0.151 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the configuration service has started + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a ConfigMap definition that contains the substitution key exists + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the ConfigMap definition has the injection metadata label + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a kubernetes resource request is made to create a ConfigMap + + 0.143 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConfigMap patch is returned + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the ConfigMap patch contains the injected value + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3326046676.html b/docs/report-tag_3326046676.html new file mode 100755 index 0000000..3d58c18 --- /dev/null +++ b/docs/report-tag_3326046676.html @@ -0,0 +1,471 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @nack-message + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@nack-message4000041010.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setupNackMessageTest() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a message is sent to the topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + consumer failed to process the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a nack is sent to broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.resetConnector() + + 0.000 + +
+ + + + + + + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3398828705.html b/docs/report-tag_3398828705.html new file mode 100755 index 0000000..968abe5 --- /dev/null +++ b/docs/report-tag_3398828705.html @@ -0,0 +1,550 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @dataTransform + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@dataTransform6000062024.176Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @dataTransform +
+ + + 1.403 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.data.transform.DataTransformSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a data transform policy has been configured + + 0.046 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is applied on a dataset + + 1.355 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dataset is transformed using the rule specified in the policy + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.data.transform.DataTransformSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+
+ + + 2.772 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a data transform policy has been configured + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is applied on a dataset + + 2.755 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dataset is transformed using the rule specified in the policy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3417977816.html b/docs/report-tag_3417977816.html new file mode 100755 index 0000000..6040abd --- /dev/null +++ b/docs/report-tag_3417977816.html @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @inference + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@inference2000021010.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Placeholder test +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3434149318.html b/docs/report-tag_3434149318.html new file mode 100755 index 0000000..ed0e4f9 --- /dev/null +++ b/docs/report-tag_3434149318.html @@ -0,0 +1,1377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @emission + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@emission160000165050.249Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @withoutConsole + @cdi +
+ + + 0.093 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.noConsole() + + 0.390 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the event is emitted via messaging + + 0.093 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is sent over the outbound channel + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @cdi +
+ + + 0.064 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the ConsoleTransport class is added to the CDI container + + 0.061 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the event is emitted via messaging + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is received for logging to the console + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @withoutConsole + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.noConsole() + + 0.044 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the event is emitted via messaging + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is not received for logging to the console + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @cdi +
+ + + 0.042 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a configuration that opts into console emission + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the CDI container is created with automatically selected context + + 0.041 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConsoleTransport class is available + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @cdi +
+ + + 0.048 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a configuration that opts out of console emission + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the CDI container is created with automatically selected context + + 0.045 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ConsoleTransport class is not available + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_344413221.html b/docs/report-tag_344413221.html new file mode 100755 index 0000000..07516af --- /dev/null +++ b/docs/report-tag_344413221.html @@ -0,0 +1,1484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @IntegrationTest + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@IntegrationTest300000308087.292Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.819 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" exists in the service + + 0.134 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicA" + + 0.684 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I receive a Future object for my queued message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.943 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" exists in the service + + 0.141 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a messaging topic named "TopicD" does not exist in the service + + 0.128 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicD" + + 0.672 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I receive a NoTopicSupportedError instead of a Future + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + client-server integration +
+ + +
+
+ + + 0.918 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic "TopicA" that exists in the service + + 0.145 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging client subscribes to "TopicA" + + 0.772 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the messaging client confirms the subscription to "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + client-server integration +
+ + +
+
+ + + 0.901 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic "TopicA" that exists in the service + + 0.136 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a messaging topic "TopicD" that does not exist in the service + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the messaging client subscribes to "TopicD" + + 0.765 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I receive a NoTopicSupportedError + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + client-server integration +
+ + +
+
+ + + 0.932 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.919 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the MANUAL strategy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is sent to the topic + + 0.008 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message is processed successfully by the consumer + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + client-server integration +
+ + +
+
+ + + 0.921 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.906 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the POSTPROCESSING strategy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is sent to the topic + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message is processed successfully by the consumer + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + client-server integration +
+ + + + + + 0.927 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.909 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the MANUAL strategy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer ack the message + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ack is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + client-server integration +
+ + + + + + 0.928 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.914 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the MANUAL strategy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer nack the message + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the nack is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3512359318.html b/docs/report-tag_3512359318.html new file mode 100755 index 0000000..97b572e --- /dev/null +++ b/docs/report-tag_3512359318.html @@ -0,0 +1,6953 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @attributes + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@attributes1170000117390390.725Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "string" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#string" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "boolean" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#boolean" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "anyUri" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#anyURI" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "uri" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#anyURI" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "date" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#date" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "int" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#integer" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "integer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#integer" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an attribute with aissemble type "double" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the attribute is read + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the fully qualified type "http://www.w3.org/2001/XMLSchema#double" is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.700 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "tonyGwynn" + + 0.695 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "strikeout" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "atBat" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "scoreGoal" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "reggie-jackson-jersey-number-test" and subject "anthonyRizzo" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hall-of-fame-profile-uri-test" and subject "alexOvechkin" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "peds-boolean-test" and subject "wallyJoyner" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-above-mendoza-line-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "kenCaminiti" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "DENY" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "no-ear-flap-test" and subject "marioMendoza" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "reggieJackson" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "tonyGwynn" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "wadeBoggs" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "PERMIT" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Specify custom attributes +
+ + +
+ Tags: + @attributes +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a resource action "hit-over-350-in-1984" and subject "kirbyPuckett" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a policy decision is requested + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a "NOT_APPLICABLE" decision is returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3553763541.html b/docs/report-tag_3553763541.html new file mode 100755 index 0000000..2e60581 --- /dev/null +++ b/docs/report-tag_3553763541.html @@ -0,0 +1,7437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @dictionary + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@dictionary1050000105350350.166Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary described by "geoTypeDictionary", "com.boozallen.aiops.geospatial" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary is available can be looked up by the name "geoTypeDictionary" and "com.boozallen.aiops.geospatial" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary described by "cyberTypeDictionary", "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary is available can be looked up by the name "cyberTypeDictionary" and "com.boozallen.aiops.cyber" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary described by "personTypeDictionary", "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary is available can be looked up by the name "personTypeDictionary" and "com.boozallen.aiops.person" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.012 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary with the following types: + + 0.002 + +
+ + + + + + + + + + + + + + + + + + + + +
namesimpleType
ssnstring
ageinteger
+ + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dictionary returns the following types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
namesimpleType
ssnstring
ageinteger
+ + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary with the following types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
namesimpleType
ipAddressstring
portinteger
+ + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the dictionary returns the following types: + + 0.000 + +
+ + + + + + + + + + + + + + + + + + + + +
namesimpleType
ipAddressstring
portinteger
+ + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary with the formats "^[0-9]{5}(?:-[0-9]{4})?$,^[A-Z]{5}$" + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the formats "^[0-9]{5}(?:-[0-9]{4})?$,^[A-Z]{5}$" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary with the formats "^[0-9]{5}$" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the formats "^[0-9]{5}$" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with empty string as a format + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that does not contains any formats + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation 1 and 5 + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the length validations 1 and 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation 5 and 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the length validations 5 and 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with min length validation 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the min length 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with min length validation 23 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the min length 23 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with max length validation 0 + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the max length 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with max length validation 23 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the max length 23 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation 10 and 8 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around length validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation 0 and -1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around length validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.008 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with length validation -100 and 10 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around length validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "1" and "5" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the range validations "1" and "5" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.001 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "5.1" and "5.9" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the range validations "5.1" and "5.9" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "25" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around range validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.007 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "0.1" and "-2.0" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around range validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the scale 0 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of 3 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the scale 3 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of 10 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the scale 10 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of -1 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around scale validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with scale of -10 + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type returns an error around scale validation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with protection policy URN of "urn:com:boozallen:secrets:maskUnlessOwner" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the protection policy URN "urn:com:boozallen:secrets:maskUnlessOwner" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with protection policy URN of "urn:mil:dod:authorization:encrypt:unlessFiveEyes" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the protection policy URN "urn:mil:dod:authorization:encrypt:unlessFiveEyes" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with an empty protection policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains no protection policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with ethics policy URN of "urn:com:boozallen:ethics:genderDistribution" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the ethics policy URN "urn:com:boozallen:ethics:genderDistribution" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with ethics policy URN of "urn:gov:agency:bias:priviledgedDemographicBreakdown" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the ethics policy URN "urn:gov:agency:bias:priviledgedDemographicBreakdown" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with an empty ethics policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains no ethics policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with drift policy URN of "urn:com:boozallen:drift:withinTwoZScores" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the drift policy URN "urn:com:boozallen:drift:withinTwoZScores" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with drift policy URN of "urn:gov:agency:drift:fancyDriftApproachX" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains the drift policy URN "urn:gov:agency:drift:fancyDriftApproachX" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @dictionary +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.setUpObjectMapper() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a dictionary type with an empty drift policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + dictionaries are read + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid dictionary type is available that contains no drift policy URN + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.DictionarySteps.cleanUp() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3560124299.html b/docs/report-tag_3560124299.html new file mode 100755 index 0000000..9da4e8c --- /dev/null +++ b/docs/report-tag_3560124299.html @@ -0,0 +1,1206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @chart-v2-migration + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@chart-v2-migration200000205050.026Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @chart-v2-migration +
+ + + 0.014 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with an aiSSEMBLE dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version less than the current version of aiSSEMBLE + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the dependency is updated to the current version + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @chart-v2-migration +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with an aiSSEMBLE dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version equal to the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @chart-v2-migration +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with an aiSSEMBLE dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version greater than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @chart-v2-migration +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with an aiSSEMBLE dependency + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version less than the current snapshot version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the dependency is updated to the current version + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @chart-v2-migration +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a helm chart with no aiSSEMBLE dependencies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the dependency is on a version less than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the helm chart migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_364301381.html b/docs/report-tag_364301381.html new file mode 100755 index 0000000..b30c86d --- /dev/null +++ b/docs/report-tag_364301381.html @@ -0,0 +1,10439 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @data-records-generation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@data-records-generation2580000258350351.609Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.110 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.086 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "jar" under "example-data-records" + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records" module generates the profile "data-delivery-combined-data-records" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.035 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "habushu" under "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records" module generates the profile "data-delivery-combined-data-records-python" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.045 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.008 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.035 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "jar" under "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-java" module generates the profile "data-delivery-combined-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-python" module generates the profile "data-delivery-combined-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.051 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.005 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.041 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "jar" under "example-data-records-core" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-core" module generates the profile "data-delivery-data-records-core-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "jar" under "example-data-records-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-spark" module generates the profile "data-delivery-data-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark" has a dependency on "example-data-records-core" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.038 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.031 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "habushu" under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-core" module generates the profile "data-delivery-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-spark" module generates the profile "data-delivery-data-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark" has a dependency on "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.056 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.047 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "jar" under "example-data-records-core-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a semantic-data module is generated with "habushu" under "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "jar" under "example-data-records-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-spark-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-java" has a dependency on "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-python" has a dependency on "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.034 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "habushu" under "example-data-records-python" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.025 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "jar" under "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.046 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-core" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-spark" with "jar" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.037 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "habushu" under "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-spark-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-python" has a dependency on "example-data-records-core-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.044 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-core" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-spark" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.037 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "jar" under "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "jar" under "example-data-records-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-java" has a dependency on "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-spark-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.016 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.014 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.018 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.016 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.024 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.023 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.027 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.042 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-combined-data-records" is generated + + 0.039 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.049 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-combined-data-records-python" is generated + + 0.046 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.020 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-records-core-java" is generated + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.031 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-records-core-python" is generated + + 0.028 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.016 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-spark" is generated + + 0.013 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.032 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-data-pyspark" is generated + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pyproject.toml file has a dependency on "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.039 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.030 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "example-data-records" + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.041 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.018 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.034 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.012 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.028 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline POM has the plugin "maven-cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.030 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.022 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "cucumber-reporting" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline POM has the plugin "maven-cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.029 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline using "machine-learning-mlflow" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.024 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline's child POMs have a dependency on "cucumber-reporting" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline's child POMs has the plugin "maven-cucumber-reporting" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.058 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.029 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.052 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.070 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.067 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.057 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.006 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.053 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.026 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.020 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.026 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.058 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.054 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.049 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.046 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.094 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-spark" is generated + + 0.091 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.079 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.011 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark" is generated + + 0.074 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the core semantic-data classes are generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the Spark functionality is generated in the module + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.134 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + A valid data-flow PySpark pipeline with a RDBMS ingest step + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipelines are validated + + 0.079 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the profile "data-delivery-pyspark-pipeline" is generated + + 0.052 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline is created with the RDBMS persist type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3710634265.html b/docs/report-tag_3710634265.html new file mode 100755 index 0000000..50e360b --- /dev/null +++ b/docs/report-tag_3710634265.html @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @training + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@training4000042020.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Placeholder test +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Placeholder test +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3944372549.html b/docs/report-tag_3944372549.html new file mode 100755 index 0000000..5ed5954 --- /dev/null +++ b/docs/report-tag_3944372549.html @@ -0,0 +1,2064 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @readPolicies + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@readPolicies40000040130130.089Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy with multiple rules + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for drift service detection + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.007 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + multiple json files exist, each with a configured policy + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the files + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the multiple json files are available for drift service detection + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.002 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured without an identifier + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is not added + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with multiple policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the file + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the file are available for drift service detection + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.045 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy with multiple rules + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.019 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.008 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + multiple json files exist, each with a configured policy + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the files + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the multiple json files are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured without an identifier + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is not added + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @readPolicies + @unit +
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with multiple policies + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the file + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the file are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy with multiple rules + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with a policy using the deprecated target attribute + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the policy has the deprecated target in the new targets attribute + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + multiple json files exist, each with a configured policy + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the files + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the multiple json files are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a policy has been configured without an identifier + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policy is loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the policy is not added + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a json file with multiple policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the policies are loaded from the file + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + all the policies from the file are available for service invocation + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3955439317.html b/docs/report-tag_3955439317.html new file mode 100755 index 0000000..ab3da10 --- /dev/null +++ b/docs/report-tag_3955439317.html @@ -0,0 +1,780 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @config-store + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@config-store120000122020.372Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.352 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + URIs pointing to valid base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configuration service starts + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configurations are loaded into the configuration store + + 0.342 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the configurations were loaded successfully + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration service records the that the given configurations were loaded successfully + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.019 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + URIs pointing to valid base and environment properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + URIs pointing to valid base and environment policies + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the configuration service records the that the given configurations were loaded successfully + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the configuration service starts again + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the configuration service skips the loading process + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + notifies the user that the configurations were previously loaded + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3959935800.html b/docs/report-tag_3959935800.html new file mode 100755 index 0000000..85a6a3a --- /dev/null +++ b/docs/report-tag_3959935800.html @@ -0,0 +1,3461 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @inbound + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@inbound69000069240240.128Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.012 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and void outbound type is defined + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and native outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and void outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and native outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.003 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and native outbound type is defined + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with void inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with native inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + an asynchronous step with messaging inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution is async + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and void outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no outbound return type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no outbound return type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3988296456.html b/docs/report-tag_3988296456.html new file mode 100755 index 0000000..91b625a --- /dev/null +++ b/docs/report-tag_3988296456.html @@ -0,0 +1,1797 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @synchronous + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@synchronous31000031130130.065Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no inbound parameter + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and void outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no outbound return type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has no outbound return type + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an inbound parameter of type "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and native outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution has an outbound return type of "DataFrame" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and void outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.004 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no inbound parameter because it consumes the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an inbound parameter of "str" to handle the inbound from kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.005 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with void inbound type and messaging outbound type is defined + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with native inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.006 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ When + a synchronous step with messaging inbound type and messaging outbound type is defined + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the step execution base has no outbound return type because it sends the outbound to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the step execution implementation has an outbound return type of "str" to send to kafka + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_3999554409.html b/docs/report-tag_3999554409.html new file mode 100755 index 0000000..e48caf8 --- /dev/null +++ b/docs/report-tag_3999554409.html @@ -0,0 +1,412 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @config-service + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@config-service3000031010.022Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.022 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the configuration service has started + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + requests a configuration property + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the property value is returned + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.configuration.store.LoadConfigurationsSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4020296611.html b/docs/report-tag_4020296611.html new file mode 100755 index 0000000..1a2aa6c --- /dev/null +++ b/docs/report-tag_4020296611.html @@ -0,0 +1,976 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @singleRule + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@singleRule100000104040.003Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @singleRule + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.024 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy and a single input + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + drift detection is run on the single input using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @singleRule + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy and a list of inputs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + drift detection is run on the list of inputs using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @singleRule + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.024 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy, a single input, and control data + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the control data is used to set the metrics for the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detection is run on the single input using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @singleRule + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + drift detection is invoked specifying the policy, a list of inputs, and control data + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the control data is used to set the metrics for the algorithm + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + drift detection is run on the list of inputs using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4026948729.html b/docs/report-tag_4026948729.html new file mode 100755 index 0000000..c19af05 --- /dev/null +++ b/docs/report-tag_4026948729.html @@ -0,0 +1,618 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @exceptional + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@exceptional6000062020.052Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.052 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.206 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.001 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_exceptional_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to NACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an exception occurs during message processing + + 0.051 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is NACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.reset_test_context() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_ack_detection() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.consumer.MessageHandlerSteps.setup_exceptional_handler() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the failure strategy is configured to DROP + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an exception occurs during message processing + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the message acknowledgement is ACK + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4028791651.html b/docs/report-tag_4028791651.html new file mode 100755 index 0000000..ee3bc99 --- /dev/null +++ b/docs/report-tag_4028791651.html @@ -0,0 +1,1318 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @pyspark_validation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@pyspark_validation240000248080.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Validation +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "999" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "100" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Validation +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "999" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "999" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Validation +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "999" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "0" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Validation +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "100" and "999" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "1001" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Validation +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "12.345" and "100.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "12.345" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Validation +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "12.345" and "100.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "100.0" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "true" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Validation +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "12.345" and "100.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "12" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Validation +
+ + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a dictionary type with range validation "12.345" and "100.0" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + validation occurs on a "100.1" typed as a string + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + validation is "false" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4036377308.html b/docs/report-tag_4036377308.html new file mode 100755 index 0000000..1696345 --- /dev/null +++ b/docs/report-tag_4036377308.html @@ -0,0 +1,1450 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @receive-message + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@receive-message200000205050.008Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @receive-message +
+ + + 0.006 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is sent to the topic + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the message is processed successfully by the consumer + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an ack is sent to broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setupNackMessageTest() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a message is sent to the topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + consumer failed to process the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a nack is sent to broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.resetConnector() + + 0.000 + +
+ + + + + + + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the manual ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is received from the topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service does not ack or nack the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the manual ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer "ack" the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "ack" is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the manual ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer "nack" the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "nack" is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4037672626.html b/docs/report-tag_4037672626.html new file mode 100755 index 0000000..4066d61 --- /dev/null +++ b/docs/report-tag_4037672626.html @@ -0,0 +1,1325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @charts-v1 + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@charts-v1210000216060.039Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @charts-v1 +
+ + + 0.026 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.131 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the image tag in the values file is less than the current version of aiSSEMBLE + + 0.013 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the chart is updated to the current version in the values configuration + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @charts-v1 +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the values file does not contain a hostname + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the image tag in the values file is less than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the chart is updated to the current version in the values configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @charts-v1 +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the values file does not contain a hostname or image name + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the image tag in the values file is less than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the chart is updated to the current version in the values configuration + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @charts-v1 +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the values file contains more properties after the image tag + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the image tag in the values file is less than the current version of aiSSEMBLE + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the version of the chart is updated to the current version in the values configuration + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @charts-v1 +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the image tag in the values file is equal to the current version of aiSSEMBLE + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @charts-v1 +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.upgrade.migration.PoetryMigrationSteps.setTestFile() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the image tag in the values file is greater than the current version of aiSSEMBLE + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the v1 helm chart migration executes + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the chart file aiSSEMBLE upgrade is skipped + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4049928517.html b/docs/report-tag_4049928517.html new file mode 100755 index 0000000..fdef825 --- /dev/null +++ b/docs/report-tag_4049928517.html @@ -0,0 +1,2004 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @alerting + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@alerting250000259090.813Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.022 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + an alert is sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the alert is published to an "alerts" topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.018 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been defined with no alert configuration + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "no drift is detected" using the policy specified + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is sent that "no drift is detected" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.020 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been defined with no alert configuration + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is sent that "drift is detected" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.003 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.016 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to only send alerts when drift is detected + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "no drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert "is not" sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to only send alerts when drift is detected + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert "is" sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.019 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to never send alerts + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "no drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is not sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.drift.detection.CommonCdiSteps.setUp() + + 0.021 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a policy has been configured to never send alerts + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + "drift is detected" using the policy specified + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an alert is not sent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.drift.detection.CommonCdiSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting +
+ + + 0.017 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.alerting.core.AlertingSteps.setUp() + + 0.480 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I am subscribed to the alert topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + an alert is published to the topic + + 0.017 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I can see the details of the alert + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.alerting.core.AlertingSteps.tearDown() + + 0.002 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @alerting +
+ + + 0.779 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.alerting.slack.SlackAlertingSteps.setUp() + + 0.425 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + an alert is sent to slack + + 0.777 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the alert is sent to the configured slack channel successfully + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.alerting.slack.SlackAlertingSteps.tearDown() + + 0.002 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4064753010.html b/docs/report-tag_4064753010.html new file mode 100755 index 0000000..39edb0b --- /dev/null +++ b/docs/report-tag_4064753010.html @@ -0,0 +1,385 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @object-store-validation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@object-store-validation2000021010.005Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.setUp() + + 0.352 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a properties file exists + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the credentials are used to verify object store connectivity + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.data.delivery.ObjectStoreValidationSteps.tearDown() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4087693520.html b/docs/report-tag_4087693520.html new file mode 100755 index 0000000..5bdcc28 --- /dev/null +++ b/docs/report-tag_4087693520.html @@ -0,0 +1,511 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @queue + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@queue7000072021.762Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.819 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" exists in the service + + 0.134 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicA" + + 0.684 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I receive a Future object for my queued message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.943 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a messaging topic named "TopicA" exists in the service + + 0.141 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a messaging topic named "TopicD" does not exist in the service + + 0.128 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is queued to "TopicD" + + 0.672 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I receive a NoTopicSupportedError instead of a Future + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4129542577.html b/docs/report-tag_4129542577.html new file mode 100755 index 0000000..064f90c --- /dev/null +++ b/docs/report-tag_4129542577.html @@ -0,0 +1,1338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @jwtToken + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@jwtToken130000136060.141Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @jwtToken +
+ + + 0.055 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "tonyGwynn" and "petco park fans" + + 0.039 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the token contains claims for "tonyGwynn", "petco park fans", and "CN=aissemble, OU=boozallen, O=boozallen, L=DC, ST=DC, C=US" + + 0.015 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @jwtToken +
+ + + 0.016 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "trevorHoffman" and "fans that stuck it out to the end of the game" + + 0.007 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the token contains claims for "trevorHoffman", "fans that stuck it out to the end of the game", and "CN=aissemble, OU=boozallen, O=boozallen, L=DC, ST=DC, C=US" + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @jwtToken +
+ + + 0.032 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "tonyGwynn" and "unitTest" + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the following claims: + + 0.011 + +
+ + + + + + + + + + + + + + + + + + + + + + + +
nameresourceaction
canSinglehit/single
canStrikeoutstrikeout
+ + + + + + + + + +
+
+ + +
+ Then + a claim is returned with the following rule and decision pairings: + + 0.010 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
nameresourceactionresult
canSinglehit/singlePERMIT
canStrikeoutstrikeoutDENY
+ + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @jwtToken +
+ + + 0.021 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "tonyGwynn" with an attribute value claim for seasons batting over .350 + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a claim is returned with the attributes "1984, 1987, 1993, 1994, 1995, 1996, 1997" + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @jwtToken +
+ + + 0.010 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "reggieJackson" with an attribute value claim for seasons batting over .350 + + 0.006 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a claim is returned with the attributes "" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @jwtToken +
+ + + 0.005 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.security.authorization.AttributeSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ When + a token is requested for "kirbyPuckett" with an attribute value claim for seasons batting over .350 + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a claim is returned with the attributes "1988" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.security.authorization.TokenSteps.tearDown() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4194876213.html b/docs/report-tag_4194876213.html new file mode 100755 index 0000000..e13d874 --- /dev/null +++ b/docs/report-tag_4194876213.html @@ -0,0 +1,1026 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @postAction + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@postAction120000124040.018Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @postAction +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a post-action with name "" and type "blah" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipeline with post-actions is read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception due to invalid post-action metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @postAction +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a post-action with name "foo" and type "" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipeline with post-actions is read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generator throws an exception due to invalid post-action metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @postAction +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a model-conversion post-action with model source "" and model target "blah" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipeline with post-actions is read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown due to missing post-action metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + +
+ Tags: + @postAction +
+ + + 0.004 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.setUp() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + an otherwise valid pipeline with a step containing a model-conversion post-action with model source "foo" and model target "" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the pipeline with post-actions is read + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an error is thrown due to missing post-action metamodel information + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aiops.mda.metamodel.element.PostActionSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_4255535051.html b/docs/report-tag_4255535051.html new file mode 100755 index 0000000..c3134fc --- /dev/null +++ b/docs/report-tag_4255535051.html @@ -0,0 +1,898 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @validatedField + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@validatedField120000124040.001Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @validatedField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpValidation() + + 0.045 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for validated field: "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a field that requires a minimum length of 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @validatedField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpValidation() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for validated field: "null" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a field that requires a minimum length of 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @validatedField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpValidation() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for validated field: "x" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a field that requires a minimum length of 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @validatedField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpValidation() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for validated field: "xxxxx" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a field that requires a minimum length of 5 + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: false + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_45975834.html b/docs/report-tag_45975834.html new file mode 100755 index 0000000..15faba9 --- /dev/null +++ b/docs/report-tag_45975834.html @@ -0,0 +1,3309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @buildOLClasses + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@buildOLClasses57000057170170.009Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.164 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Run Facet object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Facet's function to build an OpenLineage RunFacet is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage RunFacet will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Job Facet object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Facet's function to build an OpenLineage JobFacet is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage JobFacet will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Dataset Facet object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Facet's function to build an OpenLineage DatasetFacet is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage DatasetFacet will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.002 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Run object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run's function to build an OpenLineage object is called + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Run will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Job object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job's function to build an OpenLineage object is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Job will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Input Dataset object named "test_input_dataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Input Dataset's function to build an OpenLineage object is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Input Dataset will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Input Dataset object with an input facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Input Dataset's function to build an OpenLineage object is called with an input facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Input Dataset will be created with its fields populated including the input facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Output Dataset object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Output Dataset's function to build an OpenLineage object is called + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Output Dataset will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Output Dataset object with a defined output facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Output Dataset's function to build an OpenLineage object is called with a defined output facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Output Dataset will be created with its fields populated including an output facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a valid Run Event object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run Event is converted to the OpenLineage format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a valid OpenLineage Run Event will be created with its fields populated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myJob.producer" with the value "http://github.com/myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run Event is converted to the OpenLineage format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the producer value of the event is set to "http://github.com/myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.producer" with the value "http://github.com/producer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "someOtherJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run Event is converted to the OpenLineage format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the producer value of the event is set to "http://github.com/producer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myJob.namespace" with the value "myNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run Event is converted to the OpenLineage format + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Job namespace value of the event is set to "myNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myJob.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" has a default namespace "myDefaultNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Job namespace value is set to "myDefaultNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myJob.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid Job object named "myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is raised + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myInputDataset.namespace" with the value "myDataSource" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid Input Dataset object named "myInputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Input Dataset is translated to an OpenLineage Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the namespace value of the Dataset is set to "myDataSource" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @buildOLClasses +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myInputDataset.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a valid Input Dataset object named "myInputDataset" is declared + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is raised + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_523180974.html b/docs/report-tag_523180974.html new file mode 100755 index 0000000..d3f983e --- /dev/null +++ b/docs/report-tag_523180974.html @@ -0,0 +1,684 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @withoutConsole + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@withoutConsole6000062020.094Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @withoutConsole + @cdi +
+ + + 0.093 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.noConsole() + + 0.390 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the event is emitted via messaging + + 0.093 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is sent over the outbound channel + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.003 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + Emit data lineage events +
+ + +
+ Tags: + @emission + @withoutConsole + @cdi +
+ + + 0.001 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.reset() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.noConsole() + + 0.044 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a run event + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the event is emitted via messaging + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the event is not received for logging to the console + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.data.lineage.SendOpenLineageSteps.cleanupCdi() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_542955574.html b/docs/report-tag_542955574.html new file mode 100755 index 0000000..42772eb --- /dev/null +++ b/docs/report-tag_542955574.html @@ -0,0 +1,762 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @modelTrainingAPI + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@modelTrainingAPI120000124041.410Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Model Training API +
+ + +
+
+ + + 1.405 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have Kubernetes cluster access + + 1.402 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I trigger a training job + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I get a valid model training job name returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Model Training API +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have Kubernetes cluster access + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I request job logs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I get logs returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Model Training API +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have Kubernetes cluster access + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I request a list of training jobs + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I get a list of training jobs returned + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Model Training API +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have Kubernetes cluster access + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I kill a training job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I get a message indicating the job has been deleted + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_816677756.html b/docs/report-tag_816677756.html new file mode 100755 index 0000000..6a1e8ef --- /dev/null +++ b/docs/report-tag_816677756.html @@ -0,0 +1,2256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @to_openlineage + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@to_openlineage48000048130130.008Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid Run object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Run is translated to an OpenLineage Run + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage Run will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid Job object named "test_job" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage Job will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid Dataset object named "test_dataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Dataset is translated to an OpenLineage Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage Dataset will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid InputDataset object named "test_InputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the InputDataset is translated to an OpenLineage InputDataset + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage InputDataset will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid OutputDataset object named "test_OutputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the OutputDataset is translated to an OpenLineage OutputDataset + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage OutputDataset will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid RunEvent object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the RunEvent has an InputDataset named "test_InputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the RunEvent has an OutputDataset named "test_OutputDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the RunEvent has an OutputDataset named "test_OutputDataset2" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the RunEvent is translated to an OpenLineage RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage RunEvent will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + a valid Facet object + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Facet is translated to an OpenLineage Facet + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the resulting OpenLineage Facet will retain all relevant properties + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myJob.producer" with the value "http://github.com/myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the RunEvent is translated to an OpenLineage RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the producer value of the event is set to "http://github.com/myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.producer" with the value "http://github.com/producer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "someOtherJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the RunEvent is translated to an OpenLineage RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the producer value of the event is set to "http://github.com/producer" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + I have configured the property "data.lineage.myJob.namespace" with the value "myNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" for a RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the RunEvent is translated to an OpenLineage RunEvent + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Job namespace value of the event is set to "myNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myJob.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a job named "myJob" has a default namespace "myDefaultNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the Job namespace value is set to "myDefaultNamespace" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myJob.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid Job object named "myJob" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Job is translated to an OpenLineage Job + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is raised + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+
+ + + 0.000 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + the property "data.lineage.myDataset.namespace" is not set + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a valid Dataset object named "myDataset" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the Dataset is translated to an OpenLineage Dataset + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + an exception is raised + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_851523122.html b/docs/report-tag_851523122.html new file mode 100755 index 0000000..b0a308f --- /dev/null +++ b/docs/report-tag_851523122.html @@ -0,0 +1,1289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @manual-acknowledgement + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@manual-acknowledgement200000205051.856Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the manual ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + a message is received from the topic + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the service does not ack or nack the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the manual ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer "ack" the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "ack" is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+ + + + + + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.setup() + + 0.000 + +
+ + + + + + + +
+
+
+ Before + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.configManualAcknowledgement() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the manual ack strategy + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer "nack" the message + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "nack" is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + +
+
+
+ After + com.boozallen.aissemble.messaging.python.ReceiveMessageSteps.cleanup() + + 0.000 + +
+ + + + + + + +
+
+
+ +
+
+ + +
+
+ Feature: + client-server integration +
+ + + + + + 0.927 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.909 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the MANUAL strategy + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer ack the message + + 0.012 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the ack is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + client-server integration +
+ + + + + + 0.928 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + consumer subscribe to a topic named "TopicA" + + 0.914 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the subscription is configured with the MANUAL strategy + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the consumer nack the message + + 0.010 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the nack is sent to the broker + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_893087316.html b/docs/report-tag_893087316.html new file mode 100755 index 0000000..37dbe3b --- /dev/null +++ b/docs/report-tag_893087316.html @@ -0,0 +1,1418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @pyproject-generation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@pyproject-generation240000246060.265Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.068 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.011 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using the "data-delivery-pyspark" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "data-delivery-pyspark-pipeline" is generated + + 0.064 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-combined-data-records-python" is generated + + 0.030 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.030 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-data-records-core-python" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.024 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a record model with a corresponding dictionary type defined + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "metadata" profile "data-delivery-data-pyspark" is generated + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.040 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline with step type "training" using the "machine-learning-mlflow" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "machine-learning-training" is generated + + 0.038 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.068 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.PyprojectGenerationSteps.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project with the name "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline with step type "inference" using the "machine-learning-mlflow" implementation + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the "pipeline" profile "machine-learning-inference" is generated + + 0.066 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "pyproject.toml" is generated with the minimum Python version, ">=3.8" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_893540442.html b/docs/report-tag_893540442.html new file mode 100755 index 0000000..3a4019b --- /dev/null +++ b/docs/report-tag_893540442.html @@ -0,0 +1,725 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @requiredField + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@requiredField9000093030.000Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + +
+ Tags: + @requiredField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpRequired() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for a required field: "" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a required field + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @requiredField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpRequired() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for a required field: "null" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a required field + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: true + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + +
+ Tags: + @requiredField +
+ + + 0.000 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.pattern.RecordTest.setUpRequired() + + 0.000 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a string for a required field: "x" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + I update a required field + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + I should fail validation: false + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_949408484.html b/docs/report-tag_949408484.html new file mode 100755 index 0000000..1ec578f --- /dev/null +++ b/docs/report-tag_949408484.html @@ -0,0 +1,893 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @spark-application-generation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@spark-application-generation150000153030.235Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.088 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a file store named "s3TestModelOne" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.085 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.071 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.069 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "aren't" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.075 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.SparkApplicationStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a spark project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a data-flow pipeline using data-delivery-spark + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + two file stores named "s3TestModelOne" and "s3TestModelTwo" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile data-delivery-spark-pipeline is generated + + 0.073 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "s3TestModelOne_FS_PROVIDER", "s3TestModelOne_FS_ACCESS_KEY_ID", and "s3TestModelOne_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "s3TestModelTwo_FS_PROVIDER", "s3TestModelTwo_FS_ACCESS_KEY_ID", and "s3TestModelTwo_FS_SECRET_ACCESS_KEY" configurations "are" generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_972537373.html b/docs/report-tag_972537373.html new file mode 100755 index 0000000..2317d05 --- /dev/null +++ b/docs/report-tag_972537373.html @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @pyspark_data_delivery + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@pyspark_data_delivery4000042020.011Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+ Feature: + Placeholder test +
+ + +
+
+ + + 0.009 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.009 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+ Feature: + Placeholder test +
+ + +
+
+ + + 0.001 + + + +
+ +
+ + + + + +
+ + +
+
+ + +
+ Given + python files are generated + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the generated files are syntactically correct + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + diff --git a/docs/report-tag_99023576.html b/docs/report-tag_99023576.html new file mode 100755 index 0000000..248ae6d --- /dev/null +++ b/docs/report-tag_99023576.html @@ -0,0 +1,8023 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cucumber Reports (no 1) - Tag: @module-generation + + + + + + + +
+
+ + + + + + + + + + + + + + + + +
ProjectNumberDate
aiSSEMBLE114 Nov 2024, 14:07
+ +
+
+
+
+ + +
+
+

Tag Report

+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepsScenariosFeatures
TagPassedFailedSkippedPendingUndefinedTotalPassedFailedTotalDurationStatus
@module-generation2030000203250251.036Passed
+
+
+
+ + + +
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+ + + + + + + 0.110 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.005 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.086 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "jar" under "example-data-records" + + 0.011 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records" module generates the profile "data-delivery-combined-data-records" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.035 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "habushu" under "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records" module generates the profile "data-delivery-combined-data-records-python" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.045 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.008 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.035 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "jar" under "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-java" module generates the profile "data-delivery-combined-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-python" module generates the profile "data-delivery-combined-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.051 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.005 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.041 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "jar" under "example-data-records-core" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-core" module generates the profile "data-delivery-data-records-core-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "jar" under "example-data-records-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-spark" module generates the profile "data-delivery-data-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark" has a dependency on "example-data-records-core" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.038 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.031 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "habushu" under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-core" module generates the profile "data-delivery-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the "example-data-records-spark" module generates the profile "data-delivery-data-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark" has a dependency on "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.056 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.047 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "jar" under "example-data-records-core-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a semantic-data module is generated with "habushu" under "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "jar" under "example-data-records-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-spark-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-java" has a dependency on "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-python" has a dependency on "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.034 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.027 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "habushu" under "example-data-records-python" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.025 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.021 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a module with Spark functionality is generated with "jar" under "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.046 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-core" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-spark" with "jar" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.037 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "habushu" under "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "habushu" under "example-data-records-spark-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-python" has a dependency on "example-data-records-core-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-python" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.044 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-core" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records-spark" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.037 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + a semantic-data module is generated with "jar" under "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a module with Spark functionality is generated with "jar" under "example-data-records-spark-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + "example-data-records-spark-java" has a dependency on "example-data-records-core-java" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-core-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + no module is generated under "example-data-records-spark-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-core-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the user is notified that the module "example-data-records-spark-java" must be added to the parent POM + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.016 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.014 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.018 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-combined-module" is generated + + 0.016 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.024 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.023 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.027 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-data-records-separate-module" is generated + + 0.025 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-core" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + no module is generated under "example-data-records-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.039 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.007 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.030 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "example-data-records" + + 0.004 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.041 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.018 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.034 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.012 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.028 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline POM has the plugin "maven-cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.030 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.004 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.022 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline POM has a dependency on "cucumber-reporting" + + 0.003 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline POM has the plugin "maven-cucumber-reporting" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.029 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.002 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "machine-learning" pipeline using "machine-learning-mlflow" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.024 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pipeline's child POMs have a dependency on "cucumber-reporting" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + the pipeline's child POMs has the plugin "maven-cucumber-reporting" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.058 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.029 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.052 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.057 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.006 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.053 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.026 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.020 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records-python" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.033 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" named "SparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" named "PySparkPipeline" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "aissemble-maven-modules" is generated + + 0.026 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "PySparkPipeline" pipeline POM has a dependency on "example-data-records" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the "SparkPipeline" pipeline POM has a dependency on "example-data-records-java" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.058 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.002 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "habushu" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.054 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+ + + + + + + 0.049 + + + +
+ +
+ + +
+ + +
+
+
+ Before + com.boozallen.aiops.mda.generator.DataRecordsModuleStep.setup(io.cucumber.java.Scenario) + + 0.003 + +
+ + + + + + + +
+
+
+ + + +
+ + +
+
+ + +
+ Given + a project named "example" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-spark" + + 0.001 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a "data-flow" pipeline using "data-delivery-pyspark" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a dictionary and 0 or more record models + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ And + a pre-existing semantic data module called "example-data-records" with "jar" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ When + the profile "data-delivery-pyspark-pipeline" is generated + + 0.046 + +
+ + + + + + + + + + + + + + + + +
+
+ + +
+ Then + the pyproject.toml file has a dependency on "example-data-records-python" + + 0.000 + +
+ + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + +