Add a missing keyword
[integration/test.git] / csit / libraries / controller / DnbCommons.robot
1 *** Settings ***
2 Documentation     DOMNotificationBroker testing: Common keywords
3 ...
4 ...               Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
5 ...
6 ...               This program and the accompanying materials are made available under the
7 ...               terms of the Eclipse Public License v1.0 which accompanies this distribution,
8 ...               and is available at http://www.eclipse.org/legal/epl-v10.html
9 Library           Collections
10 Resource          ${CURDIR}/../MdsalLowlevel.robot
11 Resource          ${CURDIR}/../ScalarClosures.robot
12 Resource          ${CURDIR}/../WaitUtils.robot
13
14 *** Variables ***
15 # There is half a megabyte of output.xml per check.
16 # Even with check period of 15 seconds that makes more than 2 GB of output,
17 # which is too much for processing into log.html (out of memory errors).
18 ${DNB_CHECK_PERIOD_IN_SECONDS}    600
19 ${DNB_CHECK_TOLERANCE_IN_SECONDS}    ${${DNB_CHECK_PERIOD_IN_SECONDS}*1.2}
20 ${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}    ${5000}
21 ${DNB_PUBLISHER_LISTENER_PREFIX}    working-pair-
22 ${DNB_TESTED_MEMBER_INDEX}    1
23
24 *** Keywords ***
25 Dom_Notification_Broker_Test_Templ
26     [Arguments]    ${total_notification_rate}    ${test_duration_in_seconds}
27     [Documentation]    Test case template. Input parameter ${total_notification_rate} determines, how many publisher/subscriber
28     ...    pais take part in the test case. For every ${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE} one pair is created.
29     ...    The test case itself firstly subscribe listeners, then run publishers and at the end unsubscribe listeners
30     ...    and check achieved rates.
31     BuiltIn.Log    Overall requested rate: ${total_notification_rate}, test duration: ${test_duration_in_seconds} seconds.
32     WaitUtils.WU_Setup
33     ${count} =    BuiltIn.Set_variable    ${0}
34     FOR    ${suffix}    IN RANGE    ${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}    ${total_notification_rate}+1    ${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}
35         ${count} =    BuiltIn.Evaluate    ${count}+1
36         MdsalLowlevel.Subscribe_Ynl    ${DNB_TESTED_MEMBER_INDEX}    ${DNB_PUBLISHER_LISTENER_PREFIX}${count}
37     END
38     ${count} =    BuiltIn.Convert_To_Integer    ${count}
39     FOR    ${index}    IN RANGE    1    ${count}+1
40         MdsalLowlevel.Start_Publish_Notifications    ${DNB_TESTED_MEMBER_INDEX}    ${DNB_PUBLISHER_LISTENER_PREFIX}${index}    ${test_duration_in_seconds}    ${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}
41     END
42     ${getter} =    ScalarClosures.Closure_From_Keyword_And_Arguments    Get_Notifications_Active_Status    ${DNB_TESTED_MEMBER_INDEX}    ${count}
43     ${validator} =    ScalarClosures.Closure_From_Keyword_And_Arguments    Check_Notifications_Active_Status    data_holder
44     ${validation_timeout_in_seconds} =    BuiltIn.Evaluate    ${test_duration_in_seconds}+${DNB_CHECK_TOLERANCE_IN_SECONDS}
45     WaitUtils.Wait_For_Getter_Failure_Or_Stateless_Validator_Pass    timeout=${validation_timeout_in_seconds}s    period=${DNB_CHECK_PERIOD_IN_SECONDS}s    getter=${getter}    stateless_validator=${validator}
46     ${sum_local_number}    BuiltIn.Set_Variable    ${0}
47     ${low_limit_pair_rate} =    BuiltIn.Evaluate    0.9*${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}
48     ${high_limit_pair_rate} =    BuiltIn.Evaluate    1.1*${DNB_PUBLISHER_SUBSCRIBER_PAIR_RATE}
49     FOR    ${index}    IN RANGE    1    ${count}+1
50         ${all_not}    ${id_not}    ${err_not}    ${local_number} =    MdsalLowlevel.Unsubscribe_Ynl    ${DNB_TESTED_MEMBER_INDEX}
51         ...    ${DNB_PUBLISHER_LISTENER_PREFIX}${index}
52         BuiltIn.Should_Be_Equal_As_Numbers    ${err_not}    ${0}
53         BuiltIn.Should_Not_Be_Equal_As_Numbers    ${local_number}    ${0}
54         BuiltIn.Should_Be_Equal_As_Numbers    ${id_not}    ${local_number}
55         ${rate} =    BuiltIn.Evaluate    ${local_number}/${test_duration_in_seconds}
56         BuiltIn.Should_Be_True    ${rate} > ${low_limit_pair_rate}
57         BuiltIn.Should_Be_True    ${rate} < ${high_limit_pair_rate}
58         ${sum_local_number} =    BuiltIn.Evaluate    ${sum_local_number}+${local_number}
59     END
60     ${final_rate} =    BuiltIn.Evaluate    ${sum_local_number}/${test_duration_in_seconds}
61     ${low_limit_final_rate} =    BuiltIn.Evaluate    0.9*${total_notification_rate}
62     ${high_limit_final_rate} =    BuiltIn.Evaluate    1.1*${total_notification_rate}
63     BuiltIn.Should_Be_True    ${final_rate} > ${low_limit_final_rate}
64     BuiltIn.Should_Be_True    ${final_rate} < ${high_limit_final_rate}
65
66 Get_Notifications_Active_Status
67     [Arguments]    ${node_to_ask}    ${nr_pairs}
68     ${active_list} =    BuiltIn.Create_List
69     FOR    ${index}    IN RANGE    1    ${nr_pairs}+1
70         ${active}    ${publ_count}    ${last_error}    MdsalLowlevel.Check_Publish_Notifications    ${node_to_ask}    ${DNB_PUBLISHER_LISTENER_PREFIX}${index}
71         Collections.Append_To_List    ${active_list}    ${active}
72         BuiltIn.Should_Be_Equal    ${EMPTY}    ${last_error}
73     END
74     BuiltIn.Return_From_Keyword    ${active_list}
75
76 Check_Notifications_Active_Status
77     [Arguments]    ${active_list}
78     FOR    ${active}    IN    @{active_list}
79         BuiltIn.Should_Be_Equal    ${False}    ${active}
80     END