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  }