From db89b91144582aa9b228348f878a4e571df7ccfa Mon Sep 17 00:00:00 2001
From: Cedric Caffy <cedric.caffy@cern.ch>
Date: Fri, 15 Jul 2022 10:21:06 +0200
Subject: [PATCH] Resolve "HTTP REST API transition to CTA"

---
 .../cc7/etc/yum/pluginconf.d/versionlock.list | 62 +++++++++----------
 .../tests/http/archival_tracking_example.sh   | 14 +++++
 .../tests/http/eos_token_rest_api_example.sh  | 31 ++++++++++
 .../tests/http/release_file_example.sh        | 16 +++++
 .../tests/http/stage_cancellation_example.sh  | 15 +++++
 .../tests/http/stage_deletion_example.sh      |  7 +++
 .../tests/http/stage_submission_example.sh    | 16 +++++
 .../tests/http/stage_tracking_example.sh      |  7 +++
 .../tests/http/upload_file_example.sh         |  6 ++
 9 files changed, 143 insertions(+), 31 deletions(-)
 create mode 100755 continuousintegration/orchestration/tests/http/archival_tracking_example.sh
 create mode 100644 continuousintegration/orchestration/tests/http/eos_token_rest_api_example.sh
 create mode 100755 continuousintegration/orchestration/tests/http/release_file_example.sh
 create mode 100755 continuousintegration/orchestration/tests/http/stage_cancellation_example.sh
 create mode 100755 continuousintegration/orchestration/tests/http/stage_deletion_example.sh
 create mode 100755 continuousintegration/orchestration/tests/http/stage_submission_example.sh
 create mode 100755 continuousintegration/orchestration/tests/http/stage_tracking_example.sh
 create mode 100755 continuousintegration/orchestration/tests/http/upload_file_example.sh

diff --git a/continuousintegration/docker/ctafrontend/cc7/etc/yum/pluginconf.d/versionlock.list b/continuousintegration/docker/ctafrontend/cc7/etc/yum/pluginconf.d/versionlock.list
index 323555ecd9..6223554d1e 100644
--- a/continuousintegration/docker/ctafrontend/cc7/etc/yum/pluginconf.d/versionlock.list
+++ b/continuousintegration/docker/ctafrontend/cc7/etc/yum/pluginconf.d/versionlock.list
@@ -1,39 +1,39 @@
 #### EOS-4-START ####
-0:eos-archive-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-cleanup-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-client-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-fuse-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-fuse-core-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-fuse-sysv-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-fusex-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-fusex-core-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-fusex-selinux-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-ns-inspect-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-server-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-srm-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-test-4.8.87-1.el7.cern.x86_64.rpm
-0:eos-testkeytab-4.8.87-1.el7.cern.x86_64.rpm
+0:eos-archive-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-cleanup-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-client-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-fuse-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-fuse-core-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-fuse-sysv-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-fusex-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-fusex-core-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-fusex-selinux-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-ns-inspect-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-server-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-srm-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-test-4.8.88-1.el7.cern.x86_64.rpm
+0:eos-testkeytab-4.8.88-1.el7.cern.x86_64.rpm
 0:eos-xrootd-4.12.8-1.el7.cern.*
 0:eos-xrootd-debuginfo-4.12.8-1.el7.cern.*
 #### EOS-4-END ####
 #### EOS-5-START ####
-#0:eos-archive-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-cleanup-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-client-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-fuse-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-fuse-core-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-fuse-sysv-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-fusex-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-fusex-core-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-fusex-selinux-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-ns-inspect-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-server-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-srm-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-test-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-testkeytab-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-quarkdb-5.0.25-1.el7.cern.x86_64.rpm
-#0:eos-xrootd-5.4.4-1.el7.cern.*
-#0:eos-xrootd-debuginfo-5.4.4-1.el7.cern.*
+#0:eos-archive-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-cleanup-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-client-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-fuse-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-fuse-core-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-fuse-sysv-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-fusex-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-fusex-core-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-fusex-selinux-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-ns-inspect-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-server-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-srm-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-test-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-testkeytab-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-quarkdb-5.0.27-1.el7.cern.x86_64.rpm
+#0:eos-xrootd-5.4.6-1.el7.cern.*
+#0:eos-xrootd-debuginfo-5.4.6-1.el7.cern.*
 #### EOS-5-END ####
 0:eos-folly-2019.11.11.00-1.el7.cern.*
 0:eos-folly-deps-2019.11.11.00-1.el7.cern.*
diff --git a/continuousintegration/orchestration/tests/http/archival_tracking_example.sh b/continuousintegration/orchestration/tests/http/archival_tracking_example.sh
new file mode 100755
index 0000000000..721f537881
--- /dev/null
+++ b/continuousintegration/orchestration/tests/http/archival_tracking_example.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+EOSINSTANCE=ctaeos
+PORT=9000
+
+json='
+{
+  "paths":[
+    "/eos/ctaeos/tape/test.txt"
+  ]
+}
+'
+
+echo $json | curl -L -v --capath /etc/grid-security/certificates --cert ~/.globus/usercert.pem --cacert ~/.globus/usercert.pem --key ~/.globus/userkey.pem  https://$INSTANCE:$PORT/api/v0/archiveinfo -X POST -H "Content-Type: application/json" -d @- 2> /dev/null | jq
diff --git a/continuousintegration/orchestration/tests/http/eos_token_rest_api_example.sh b/continuousintegration/orchestration/tests/http/eos_token_rest_api_example.sh
new file mode 100644
index 0000000000..62f84da91f
--- /dev/null
+++ b/continuousintegration/orchestration/tests/http/eos_token_rest_api_example.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+EOSINSTANCE=ctaeos
+PORT=9000
+EXPIRE=`date +%s`; let LATER=$EXPIRE+64000
+token=`eos token --path /eos/ctaeos/tape/ --expires $LATER --tree --owner owner_username --group owner_group_name`
+curl -k -L -v  https://$EOSINSTANCE:$PORT/api/v0/archiveinfo -X POST -H "Authorization: Bearer $token" -H "Content-Type: application/json" -d '{"paths":["/eos/ctaeos/tape/test.txt","/file/does/not/exist"]}' 2> /dev/null | jq
+[
+  {
+    "locality": "TAPE",
+    "path": "/eos/ctaeos/tape/test.txt"
+  },
+  {
+    "error": "USER ERROR: file does not exist or is not accessible to you",
+    "path": "/file/does/not/exist"
+  }
+]
+
+
+token=`eos token --path /eos/ctaeos/ --expires $LATER`
+curl -k -L -v  https://$EOSINSTANCE:$PORT/api/v0/archiveinfo -X POST -H "Authorization: Bearer $token" -H "Content-Type: application/json" -d '{"paths":["/eos/ctaeos/tape/test.txt","/file/does/not/exist"]}' 2> /dev/null | jq
+[
+  {
+    "error": "USER ERROR: you don't have prepare permission",
+    "locality": "TAPE",
+    "path": "/eos/ctaeos/tape/test.txt"
+  },
+  {
+    "error": "USER ERROR: file does not exist or is not accessible to you",
+    "path": "/file/does/not/exist"
+  }
+]
diff --git a/continuousintegration/orchestration/tests/http/release_file_example.sh b/continuousintegration/orchestration/tests/http/release_file_example.sh
new file mode 100755
index 0000000000..b058703f0f
--- /dev/null
+++ b/continuousintegration/orchestration/tests/http/release_file_example.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+EOSINSTANCE=ctaeos
+PORT=9000
+
+json='
+{
+  "paths":[
+    "/eos/ctaeos/tape/test.txt"
+  ]
+}
+'
+
+echo $json | sudo curl -L -v --capath /etc/grid-security/certificates --cert ~/.globus/usercert.pem --cacert ~/.globus/usercert.pem --key ~/.globus/userkey.pem -X POST  https://$EOSINSTANCE:$PORT/api/v0/release/fake_id -d @- 2>/dev/null
+
+
diff --git a/continuousintegration/orchestration/tests/http/stage_cancellation_example.sh b/continuousintegration/orchestration/tests/http/stage_cancellation_example.sh
new file mode 100755
index 0000000000..d0b88657eb
--- /dev/null
+++ b/continuousintegration/orchestration/tests/http/stage_cancellation_example.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Usage: ./stage_cancellation.sh stage_request_id
+
+EOSINSTANCE=ctaeos
+PORT=9000
+
+json='
+{
+  "paths":[
+    "/eos/ctaeos/tape/test.txt"
+  ]
+}'
+
+echo $json | sudo curl -L --capath /etc/grid-security/certificates --cert ~/.globus/usercert.pem --cacert ~/.globus/usercert.pem --key ~/.globus/userkey.pem -H 'Content-Type: application/json' -X POST https://$EOSINSTANCE:$PORT/api/v0/stage/$1/cancel --data @-
diff --git a/continuousintegration/orchestration/tests/http/stage_deletion_example.sh b/continuousintegration/orchestration/tests/http/stage_deletion_example.sh
new file mode 100755
index 0000000000..80e2cae2bb
--- /dev/null
+++ b/continuousintegration/orchestration/tests/http/stage_deletion_example.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+# Usage: ./stage_deletion.sh stage_request_id
+EOSINSTANCE=ctaeos
+PORT=9000
+
+sudo curl -L -v --capath /etc/grid-security/certificates --cert ~/.globus/usercert.pem --cacert ~/.globus/usercert.pem --key ~/.globus/userkey.pem -X DELETE https://$EOSINSTANCE:$PORT/api/v0/stage/$1 2> /dev/null
diff --git a/continuousintegration/orchestration/tests/http/stage_submission_example.sh b/continuousintegration/orchestration/tests/http/stage_submission_example.sh
new file mode 100755
index 0000000000..65dbcdfa65
--- /dev/null
+++ b/continuousintegration/orchestration/tests/http/stage_submission_example.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+EOSINSTANCE=ctaeos
+PORT=9000
+
+json='
+{
+  "files":[
+    {
+      "path":"/eos/ctaeos/tape/test.txt"
+    }
+  ] 
+}
+'
+
+echo $json | sudo curl -L -v --capath /etc/grid-security/certificates --cert ~/.globus/usercert.pem --cacert ~/.globus/usercert.pem --key ~/.globus/userkey.pem -X POST https://$INSTANCE:$PORT/api/v0/stage -d @- 2> /dev/null | jq
diff --git a/continuousintegration/orchestration/tests/http/stage_tracking_example.sh b/continuousintegration/orchestration/tests/http/stage_tracking_example.sh
new file mode 100755
index 0000000000..b133611c6f
--- /dev/null
+++ b/continuousintegration/orchestration/tests/http/stage_tracking_example.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+# Usage: ./stage_tracking_example.sh stage_request_id
+
+EOSINSTANCE=ctaeos
+PORT=9000
+
+sudo curl -L -v --capath /etc/grid-security/certificates --cert ~/.globus/usercert.pem --cacert ~/.globus/usercert.pem --key ~/.globus/userkey.pem -X GET https://$EOSINSTANCE:$PORT/api/v0/stage/$1 2> /dev/null | jq
diff --git a/continuousintegration/orchestration/tests/http/upload_file_example.sh b/continuousintegration/orchestration/tests/http/upload_file_example.sh
new file mode 100755
index 0000000000..aa3b84d4f8
--- /dev/null
+++ b/continuousintegration/orchestration/tests/http/upload_file_example.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+EOSINSTANCE=ctaeos
+PORT=9000
+DESTDIR=/eos/ctaeos/tape/
+SOURCEFILE=file.txt
+curl -k -L -v --capath /etc/grid-security/certificates --cert ~/.globus/usercert.pem --cacert ~/.globus/usercert.pem --key ~/.globus/userkey.pem  https://$EOSINSTANCE:$PORT$DESTDIR --upload-file $SOURCEFILE
-- 
GitLab