2020-06-16 15:10:02 +08:00
*** Settings ***
Library Collections
Library RequestsLibrary
Resource ../../../03-Variable/BifangApiVariable.txt
Resource ../../../02-Keyword/tsg_bfapi/policy_file_interface/FunctionalKeywords.robot
Resource ProcessPolicyBody.robot
Library Collections
Resource ../Common.robot
*** Variables ***
2020-06-18 18:40:39 +08:00
${policyUrl} /policy/compile
2020-06-16 15:10:02 +08:00
*** Keywords ***
#get查询策略, 传入字典对象, 该方法将字典对象自动拼接成get请求查询条件
QueryPolicies
[Documentation]
... 查询策略, params为参数字典, version为接口版本号
[Arguments] ${params} ${version}
Log To Console Call QueryPolicies
Dictionary Should Contain Key ${params} policyType
${paramsStr} Dictionary-To-QueryParams ${params}
2020-06-18 18:40:39 +08:00
${response} BaseGetRequestForV2 ${policyUrl} ${paramsStr} ${version}
2020-06-16 15:10:02 +08:00
${rescode} Set Variable ${response['code']}
[Return] ${rescode} ${response}
AddPolicies
[Documentation]
... 新增策略
... returnData: 是否返回数据, 这里需要设置为1
... policyList: 策略列表, 支持dict与list两种形式
... version: 接口版本号
2020-06-16 16:52:32 +08:00
... 支持v1版本接口与v2版本接口
... v1版本特殊参数说明:
... referenceObject=${265}|TSG_FIELD_HTTP_HOST,${266}|TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN
... 为字符串类型,每条引用的策略对象信息以','分隔
... [objectId]|[protocolFileds],... , 多个protocolFileds用'&'连接
... appObjectIdArray==${2},${3}
... 为字符串类型,以','分隔
... v2版本特殊参数说明:
... v2版本中无referenceObject, 取而代之的是source, destination, filterList
... source= ${265}|TSG_FIELD_HTTP_HOST,${266}|TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN
... destination= ${265}|TSG_FIELD_HTTP_HOST,${266}|TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN
... filterList= ${265}|${257}:TSG_FIELD_HTTP_HOST,${266}|${299}:TSG_FIELD_SSL_SNI&TSG_FIELD_SSL_SAN
... filterList由多个数字用‘ |’ 分隔, 加上: 对上对应的protocolFiled,
... 一个filter中的protocolFiled是确定的, 一个protocolFiled对应多个objectId
... appIdObjects==${2},${3}
2020-06-16 15:10:02 +08:00
[Arguments] ${returnData} ${policyList} ${version}
Log To Console Call AddPolicies
${returnData}= Run Keyword If '${returnData}' == '${EMPTY}' Set Variable 1
... ELSE Set Variable ${returnData}
#控制台打印参数
#Log To Console ${policyList}
#必选参数判定
Should Not Be Empty ${policyList}
${dictType} = Evaluate type(${policyList})
2020-06-23 18:15:03 +08:00
${body} Run Keyword If "${dictType}" == "<class 'list'>" PolicyListDataOperation ${returnData} ${policyList} add ${version}
... ELSE IF "${dictType}" == "<class 'dict'>" PolicyDataOperation ${returnData} ${policyList} add ${version}
2020-06-16 15:10:02 +08:00
... ELSE Set Variable ${EMPTY}
#${body} Set Variable {"opAction":"add","policyList":{"policyName":"wx-test","policyType":"tsg_security","action":"deny","userTags":"","doBlacklist":0,"doLog":1,"policyDesc":"","effectiveRange":{"tag_sets":[[]]},"userRegion":{"protocol":"SSL","method":"drop"},"source":[{"objectId":3101,"protocolField":"TSG_SECURITY_SOURCE_ADDR"}],"destination":[],"filterList":[{"filter":[{"objectId":3404,"protocolField":"TSG_FIELD_SSL_CN"}]}],"appIdObjects":[3],"isValid":0,"scheduleId":[]}}
2020-06-18 18:40:39 +08:00
${response} BasePostRequestForV2 ${policyUrl} ${body} ${version}
2020-06-23 18:15:03 +08:00
${policyIds} Run Keyword If "${returnData}" == "1" Get-PolicyIds ${response}
2020-06-16 15:10:02 +08:00
... ELSE Create List
${rescode} Set Variable ${response['code']}
2020-06-18 16:29:17 +08:00
Should Be Equal As Strings ${rescode} 200
2020-06-16 19:40:59 +08:00
[Return] ${rescode} ${policyIds}
UpdatePolicies
2020-06-18 18:40:39 +08:00
[Documentation]
... 与新增类似, update多一个参数opAction
... opAction可为update,enable,disable
2020-06-16 19:40:59 +08:00
[Arguments] ${returnData} ${policyList} ${version} ${opAction}
Log To Console Call UpdatePolicies
${returnData}= Run Keyword If '${returnData}' == '${EMPTY}' Set Variable 1
... ELSE Set Variable ${returnData}
#必选参数判定
Should Not Be Empty ${policyList}
${dictType} = Evaluate type(${policyList})
2020-06-23 18:15:03 +08:00
${body} Run Keyword If "${dictType}" == "<class 'list'>" PolicyListDataOperation ${returnData} ${policyList} ${opAction} ${version}
... ELSE IF "${dictType}" == "<class 'dict'>" PolicyDataOperation ${returnData} ${policyList} ${opAction} ${version}
2020-06-16 19:40:59 +08:00
... ELSE Set Variable ${EMPTY}
2020-06-18 18:40:39 +08:00
${response} BaseEditRequestForV2 ${policyUrl} ${body} ${version}
2020-06-16 19:40:59 +08:00
${rescode} Set Variable ${response['code']}
2020-06-18 16:29:17 +08:00
Should Be Equal As Strings ${rescode} 200
2020-06-18 18:40:39 +08:00
[Return] ${rescode}
DeletePolicies
2020-06-23 18:15:03 +08:00
[Documentation]
... 删除策略
... params结构可为List或者dict
... dict结构
... dict data: {'policyType':'tsg_security','policyIds':[1,2,3]}
... list 结构
... list data:[{'policyType':'tsg_security','policyIds':[1,2,3]},{'policyType':'pxy_manipulation','policyIds':[4,5,6]}]
2020-06-18 18:40:39 +08:00
[Arguments] ${params}
${paramsType} Evaluate type(${params})
2020-06-23 18:15:03 +08:00
Run Keyword And Return If "${paramsType}" == "<class 'dict'>" DeletePolicyWithParamDict ${params}
2020-06-18 18:40:39 +08:00
FOR ${param} IN @{params}
2020-06-23 18:15:03 +08:00
${rescode} DeletePolicyWithParamDict ${param}
2020-06-18 18:40:39 +08:00
END
[Return] ${rescode}
2020-06-23 18:15:03 +08:00
DeletePolicy1
2020-06-18 18:40:39 +08:00
[Documentation]
2020-06-23 18:15:03 +08:00
... policyIds 策略id list [1,2,3]
... policyType 策略类型 tsg_security等
2020-06-18 18:40:39 +08:00
[Arguments] ${policyIds} ${policyType}
${params} Create Dictionary policyIds=${policyIds} policyType=${policyType}
${response} BaseDeleteRequest /${version}${policyUrl} ${params}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
2020-06-19 19:13:50 +08:00
[Return] ${rescode}
ImportPolicy
[Documentation]
... 策略导入
[Arguments] ${filePath} ${fileName} ${policyType}
Directory Should Exist ${path}
File Should Exist ${path}/${filePath}/${fileName}
File Should Not Be Empty ${path}/${filePath}/${fileName}
${size} Get File Size ${path}/${filePath}/${fileName}
${binFile} Evaluate (r'import_policy.json',open(r"${path}/${filePath}/${fileName}",'rb'),'application/json')
Log ${binFile}
${data} Create Dictionary policyType=${policyType}
${file} Create Dictionary file=${binFile}
${response} BaseMultipartPostRequest ${policyUrl}/batch ${data} ${file} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${rescode}
ExportPolicy
[Documentation]
... 策略导出
2020-06-23 18:15:03 +08:00
... policyType tsg_security等
... policyIds 1,2,3
... policyName 字符串
2020-06-19 19:13:50 +08:00
[Arguments] ${policyType} ${policyIds} ${policyName}
Should Not Be Empty ${policyType}
${params} Create Dictionary policyType=${policyType}
Run Keyword If "${policyIds}"!="${EMPTY}" Set To Dictionary ${params} policyIds=${policyIds}
Run Keyword If "${policyName}"!="${EMPTY}" Set To Dictionary ${params} policyName=${policyName}
${paramsStr} Dictionary-To-QueryParams ${params}
${response} BaseFormRequest1 ${policyUrl}/batch ${paramsStr} ${version}
[Return] ${response}
WriteFile
[Arguments] ${filePath} ${fileName} ${content}
Create File ${path}/${filePath}/${fileName}
${type} Evaluate type(${content})
${content} Run Keyword If "${type}" == "<class 'dict'>" json.Dumps ${content}
... ELSE Set Variable ${content}
2020-06-23 18:15:03 +08:00
Append To File ${path}/${filePath}/${fileName} ${content}
VerifyPolicies
[Documentation]
... 策略验证
... 支持多个策略验证与单个策略验证
... 单个策略验证时verifyList 是一个dict
... 多个策略验证时是一个list
... atrributeValue字段可为三种格式
... 1:dict
... 2:json
... 3.字符串, ip的value对应格式为clientIp|clientPort|serverIp|serverPort|addrType|protocol,注意addrType,protocol为数字
... signature 的value对应格式为district|string
... string的格式就是string
... 以上三种方式可以混合搭配使用
[Arguments] ${verifyList}
Log To Console Call VerifyPolicies
#必选参数判定
Should Not Be Empty ${verifyList}
${dictType} = Evaluate type(${verifyList})
${body} Run Keyword If "${dictType}" == "<class 'list'>" VerifyPolicyList ${verifyList}
... ELSE IF "${dictType}" == "<class 'dict'>" VerifyPolicyObj ${verifyList}
... ELSE Set Variable ${EMPTY}
${body} Set Variable {"verifyList":${body}}
${response} BasePostRequestForV2 /policy/verify ${body} ${version}
${rescode} Set Variable ${response['code']}
Should Be Equal As Strings ${rescode} 200
[Return] ${rescode} ${response['data']}