1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#!/bin/env bash
# Simple test to use one of the files generated by TestDQMServicesDemo test
# to upload it to the dev DQMGUI, making sure that the ROOT file format generated
# is compatible. See cmssw issue #43590.
# Requires curl and jq to be installed. Also requires either a Grid key and certificate,
# or a proxy to be available.
set -x
set -e
force=0
function usage() {
echo "Usage: $0 [--help] [--force]"
}
# Parse args, if any.
while [[ "$#" -gt 0 ]]; do
case $1 in
--force)
force=1
shift
;;
--help)
usage
exit 0
;;
*)
echo "Unknown parameter passed: $1"
usage
exit 1
;;
esac
done
# Don't run the test unless it's run by the bot for PRs or IBs.
# The user may force it by adding --force
if [ -z "$CMSBOT_CI_TESTS" ] && [ "$force" -ne 1 ]; then
echo "Non-automated test environment, skipping test."
exit 0
fi
DEV_DQMGUI_URL="https://cmsweb.cern.ch/dqm/dev"
# Create a unique fake "Era", so that different executions of this test
# produce differently named files. This is required, because this test might pass
# if it's checking a file that was successfully uploaded during a previous
# instance of the same test.
UNIQUE_ERA_ID=$(date -u +%Y%m%d%H%M%S%N)
OLD_FILENAME=DQM_V0001_R000000001__Harvesting__DQMTests__DQMIO.root
NEW_FILENAME=${OLD_FILENAME/DQMTests/DQMTests${UNIQUE_ERA_ID}}
# Make sure the required file exists. We expect to find it in the current directory.
if [ ! -f $OLD_FILENAME ]; then
echo "Unable to find required file ${OLD_FILENAME}!"
exit 1
fi
# Prepare curl args
curl_args=""
if [ -n "$X509_CERT_DIR" ]; then
curl_args="${curl_args} --capath ${X509_CERT_DIR}/"
else
curl_args="${curl_args} -k"
fi
if [ -n "$X509_USER_PROXY" ]; then
curl_args="${curl_args} --key ${X509_USER_PROXY} --cert ${X509_USER_PROXY}"
elif [ -n "$X509_USER_KEY" ] && [ -n "$X509_USER_CERT" ]; then
curl_args="${curl_args} --key ${X509_USER_KEY} --cert ${X509_USER_CERT}"
elif [ -f $HOME/.globus/usercert.pem ] && [ -f $HOME/.globus/userkey.pem ]; then
curl_args="${curl_args} --key $HOME/.globus/userkey.pem --cert $HOME/.globus/usercert.pem"
else
echo "Unable to find proxy or key/cert env vars, cannot continue"
exit 1
fi
# Make a copy with a filename that conforms to the naming convention required by DQMGUI.
rm -f "$NEW_FILENAME"
cp $OLD_FILENAME "$NEW_FILENAME"
# Upload the file to the DQMGUI
visDQMUpload.py "$DEV_DQMGUI_URL" "$NEW_FILENAME"
# Wait for a bit for the file to be imported into the DQMGUI's index.
# The currently used file is very small and expected to be ingested quickly,
# but better safe than sorry.
SECONDS_TO_WAIT=600
# Reset shell's internal SECONDS var.
SECONDS=0
while true; do
# Wait for the dataset to appear in the /json/samples endpoint. It might take a while.
if curl -sL $curl_args "${DEV_DQMGUI_URL}/data/json/samples?match=DQMTests${UNIQUE_ERA_ID}" | jq .samples[0].items[0].dataset | grep -q "$UNIQUE_ERA_ID"; then
exit 0
fi
sleep 10
# Timeout after SECONDS_TO_WAIT have passed.
if [ $SECONDS -ge $SECONDS_TO_WAIT ]; then
exit 1
fi
done
exit 1
|