github.com/henvic/wedeploycli@v1.7.6-0.20200319005353-3630f582f284/functional/procs/curl_procs.tcl (about) 1 #!/usr/bin/expect 2 3 package require TclCurl 4 5 set base_url "https://api.$::_remote" 6 set auth $::_tester(email):$::_tester(password) 7 set team_auth $::_teamuser(email):$::_teamuser(password) 8 set content_type_header {"Content-Type: application/json; charset=utf-8"} 9 10 proc http_get {url userpw {args}} { 11 if { [llength $args] > 0 } { 12 set pairs {} 13 foreach {name value} $args { 14 lappend pairs "[curl::escape $name]=[curl::escape $value]" 15 } 16 append url ? [join $pairs &] 17 } 18 19 set curl_handle [curl::init] 20 $curl_handle configure \ 21 -url $url \ 22 -userpwd $userpw \ 23 -bodyvar body 24 25 if { [catch {$curl_handle perform} curl_error_number] } { 26 error [curl::easystrerror $curl_error_number] 27 } 28 29 set code [$curl_handle getinfo httpcode] 30 $curl_handle cleanup 31 32 return [list $code $body] 33 } 34 35 proc http_post {url userpw data} { 36 set curl_handle [curl::init] 37 $curl_handle configure \ 38 -url $url \ 39 -userpwd $userpw \ 40 -httpheader $::content_type_header \ 41 -post 1 \ 42 -postfields $data \ 43 -bodyvar body 44 45 if { [catch {$curl_handle perform} curl_error_number] } { 46 error [curl::easystrerror $curl_error_number] 47 } 48 49 set code [$curl_handle getinfo httpcode] 50 $curl_handle cleanup 51 52 return [list $code $body] 53 } 54 55 proc handle_response {message body} { 56 append message "\n $body" 57 add_to_report "$message" 58 print_msg $message red 59 } 60 61 proc assert_service_exists {project service} { 62 print_msg "Verifying service $service-$project" 63 64 set url $::base_url/projects/$project/services/$service 65 set response [http_get $url $::auth] 66 set response_code [lindex $response 0] 67 set body [lindex $response 1] 68 69 if { $response_code != 200 } { 70 expectation_not_met "Could not verify service $service-$project\n$body" 71 } 72 } 73 74 proc create_project {project {env false}} { 75 print_msg "Creating project $project" 76 77 set timeout 30 78 set url $::base_url/projects 79 set data "\{\"projectId\":\"$project\", \"environment\": $env\}" 80 set response [http_post $url $::auth $data] 81 set response_code [lindex $response 0] 82 set body [lindex $response 1] 83 set timeout $::_default_timeout 84 85 if { $response_code != 200 } { 86 handle_response "Project $project could not be created" $body 87 } 88 sleep 10 89 } 90 91 proc create_service {project service {image wedeploy/hosting}} { 92 print_msg "Creating service $service for project $project" 93 94 set timeout 30 95 set url $::base_url/projects/$project/services 96 set data "\{\"serviceId\":\"$service\",\"image\":\"$image\"\}" 97 set response [http_post $url $::auth $data] 98 set response_code [lindex $response 0] 99 set body [lindex $response 1] 100 set timeout $::_default_timeout 101 102 if { $response_code != 200 } { 103 handle_response "Service $service could not be created" $body 104 } 105 } 106 107 proc create_user {email {password test} {name Tester} {plan standard}} { 108 print_msg "Creating user $email" 109 110 set data "\{\ 111 \"email\": \"$email\",\ 112 \"password\": \"$password\",\ 113 \"name\": \"$name\"\}" 114 set url $::base_url/user/create 115 set response [http_post $url $::team_auth $data] 116 set response_code [lindex $response 0] 117 set body [lindex $response 1] 118 119 if { $response_code != 200 } { 120 handle_response "Could not create user $email" $body 121 error "Error creating user" 122 } 123 124 # get token and confirm user 125 regexp {"confirmed":"(.*?)"} $body matched confirm_token 126 127 set params "email $email confirmationToken $confirm_token" 128 set response [http_get $::base_url/confirm $::auth {*}$params] 129 set response_code [lindex $response 0] 130 set body [lindex $response 1] 131 132 if { $response_code != 302 } { 133 handle_response "Could not confirm user $email" $body 134 error "Error confirming email" 135 } 136 137 set_user_plan $plan 138 } 139 140 proc delete_project {project} { 141 print_msg "Deleting project $project" 142 143 set url $::base_url/projects/$project 144 145 set curl_handle [curl::init] 146 $curl_handle configure \ 147 -customrequest DELETE \ 148 -url $url \ 149 -userpwd $::auth 150 151 if { [catch {$curl_handle perform} curl_error_number] } { 152 error [curl::easystrerror $curl_error_number] 153 } 154 155 set code [$curl_handle getinfo httpcode] 156 $curl_handle cleanup 157 158 if { $code != 204 } { 159 handle_response "Could not delete project $project" "" 160 } 161 } 162 163 proc get_container_ids {project service} { 164 set url $::base_url/projects/$project/services/$service/instances 165 set response [http_get $url $::auth] 166 set response_code [lindex $response 0] 167 set body [lindex $response 1] 168 169 if { $response_code != 200 } { 170 handle_response "Could not get container ids" $body 171 error "Could not get container ids" 172 } 173 174 set match_list [regexp -all -inline {"containerId":"(.*?)"} $body] 175 set ids {} 176 177 foreach { whole container_id } $match_list { 178 lappend ids $container_id 179 } 180 181 return $ids 182 } 183 184 # get user id of currently logged in user, presumed to be $::_tester(email) 185 proc get_user_id {} { 186 set url $::base_url/user 187 set response [http_get $url $::auth] 188 set response_code [lindex $response 0] 189 set body [lindex $response 1] 190 191 if { $response_code != 200 } { 192 handle_response "Could not get user id" $body 193 } 194 195 regexp {"id":"(.*?)"} $body matched user_id 196 return $user_id 197 } 198 199 # update plan of logged in user 200 proc set_user_plan {plan} { 201 print_msg "Setting user plan to $plan" 202 203 set data "\{\"planId\": \"$plan\"\}" 204 set user_id [get_user_id] 205 set url $::base_url/admin/users/$user_id 206 207 set curl_handle [curl::init] 208 $curl_handle configure \ 209 -customrequest PATCH \ 210 -url $url \ 211 -userpwd $::team_auth \ 212 -httpheader $::content_type_header \ 213 -postfields $data \ 214 -bodyvar body 215 216 if { [catch {$curl_handle perform} curl_error_number] } { 217 error [curl::easystrerror $curl_error_number] 218 } 219 220 set response_code [$curl_handle getinfo httpcode] 221 $curl_handle cleanup 222 223 if { $response_code != 200 } { 224 handle_response "Could not update user plan" $body 225 } 226 } 227 228 proc user_exists {email} { 229 set url $::base_url/admin/users 230 set response [http_get $url $::team_auth] 231 set response_code [lindex $response 0] 232 set body [lindex $response 1] 233 234 if { $response_code != 200 } { 235 handle_response "Could not get users" $body 236 error "Could not get users" 237 } 238 239 return [string match *$email* $body] 240 }