Skip to content

Commit a630665

Browse files
Use secure gRPC channels for spot_wrapper.testing mocks (#103)
* Use secure gRPC channels for spot_wrapper.testing mocks Signed-off-by: Michel Hidalgo <[email protected]> * Please linters Signed-off-by: Michel Hidalgo <[email protected]> * Install certificates and key Signed-off-by: Michel Hidalgo <[email protected]> --------- Signed-off-by: Michel Hidalgo <[email protected]>
1 parent bbca68b commit a630665

File tree

11 files changed

+253
-21
lines changed

11 files changed

+253
-21
lines changed

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
version="1.0.0",
66
description="Wrapper for Boston Dynamics Spot SDK",
77
packages=find_packages(include=["spot_wrapper*"]),
8+
package_data={"spot_wrapper.testing.credentials": ["*.crt", "*.pem"]},
89
install_requires=["bosdyn-client", "bosdyn-api", "bosdyn-mission", "bosdyn-core", "grpcio", "inflection", "pytest"],
910
)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Copyright (c) 2024 Boston Dynamics AI Institute LLC. See LICENSE file for more info.
2+
3+
import dataclasses
4+
import pathlib
5+
import typing
6+
7+
import pkg_resources
8+
9+
10+
@dataclasses.dataclass
11+
class SpotSSLCertificates:
12+
root_certificate_path: pathlib.Path
13+
robot_certificate_key_path: pathlib.Path
14+
robot_certificate_paths: typing.Sequence[pathlib.Path]
15+
16+
17+
DEFAULT_TESTING_CERTIFICATES = SpotSSLCertificates(
18+
robot_certificate_key_path=pathlib.Path(
19+
pkg_resources.resource_filename("spot_wrapper.testing.credentials", "robot.pem")
20+
),
21+
robot_certificate_paths=[
22+
pathlib.Path(pkg_resources.resource_filename("spot_wrapper.testing.credentials", certificate_filename))
23+
for certificate_filename in (
24+
"api.spot.robot.crt",
25+
"auth.spot.robot.crt",
26+
"id.spot.robot.crt",
27+
"payload-registration.spot.robot.crt",
28+
)
29+
],
30+
root_certificate_path=pathlib.Path(pkg_resources.resource_filename("spot_wrapper.testing.credentials", "ca.crt")),
31+
)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIE0TCCArkCAQEwDQYJKoZIhvcNAQELBQAwQjELMAkGA1UEBhMCVVMxCzAJBgNV
3+
BAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24xFTATBgNVBAoMDHNwb3Rfd3JhcHBlcjAg
4+
Fw0yNDA0MTIxODEzMDVaGA8zMDIzMDgxNDE4MTMwNVowGTEXMBUGA1UEAwwOYXBp
5+
LnNwb3Qucm9ib3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDafDjd
6+
dyftz5pvGqphNphRSIX6/jTeH+l5sKGyVhC6d+k81GkRKptQ77XNtBovVg6SuE4O
7+
i1poHwkGfvnODM6CEXb3MIBCKBpq8UNl+fP5DRnM1AksKVjRyq0kOELtNlWyfRuC
8+
nhHYVT5XoVL99Wrb6RfUbdMSx4Iu7U+A0GUsatOvMXAK3IItifHNm1PYdggZP/Zw
9+
Mrm6Xky7HGN7k9wf3FEmAEpPJcswvA/+x0GGQnAESNbsaE26n5MgVSm9e45l9z5R
10+
4LtAyVnAYnuK7l2/5+brwBd70doq2cdmoyUxX2eK+91pojR2hVPe3avgoT0yYTvc
11+
d+ykkaJWB5tKIHgTSNactN3DsZD//d0s6pOP0yiRPSbqmC6GsGnDhjqLRsa/D6D7
12+
fc71Ymk+pv5WyHKB6Tl+q2j8eYkLYE8hCc0Y0F89Ph/yGG22CzW4v8tQrG+QLi/0
13+
1AJjzGybYeyV5OpuRsMKUlqTOtEssR82gCMYk1Qbo8DGGPbztdL9GaViLrykmyX2
14+
+j/On5RS0m4hSSIxCGuVjvYZz2oIvZbadRpnrIKCtwYLkkWXmGZi5YTlKDtHqlyt
15+
i73FyOG0v+f6mCud2WxLncZ+4Db7dWGkO4z+pqtBfgv/wmb0/zY6oEpbX4dQchBo
16+
/i8Zt4Lpjwi1fq9yvE32BAC4EuE4GyCjU8UoAwIDAQABMA0GCSqGSIb3DQEBCwUA
17+
A4ICAQA1l7TjPgCgesqmX2iFsSndoIfS9FKrrOUdE0w7/2WxVKEhOe/DiGKZPBuL
18+
t62sDBwtEEZsML3PAVvR8dP5HesKBFdj5U3sNwWk0epsXq2uiF15T3zM+YAvibwG
19+
m5OBwcuB74oAKKJdimNeLvIo1oB99lt5Xx7irigqeqoIMw5ul4dntasOKuOm7hVS
20+
X2rRJk0dWdiOwi7YuFIpB7Z1NtBAOqlZLzWIZoNC6EjXcWLba8E2Pp2T69aozkGB
21+
/7JWTEtMdz2J4Qd3ADcUx8SAu5PbAJyyth+6B6+UWRRIbHkYMuL37udEuL77olQa
22+
7gOSX/A8V0Xt8zUbHwl28Q8BafNcLQq7tOImZXTh0hv8hoOx970qLkaY4S9p8PKr
23+
Gy4RokKHlzg42n4wUD0BQP2Clv8QjGgDTT/XT0oZcbXmbGXtb/psdMw5+dZtNk+u
24+
MweA//HigOJ9CqCEpyaiO4obz6w5Kap6SCCAzZAOOPMWrRtMThGnCxXu9DHQJB1r
25+
QJC/MQ/5hNmCoHZEH/5v22G6goC/2J9hHxbnF3irksC48vcgy/x0zfENi+q2c9cr
26+
lH6oIB3Jfh8q9JgXaCU8B+kehIsyF6BzFBtUPN8csuY5+q/G4IuUUDCElWiOSSXK
27+
u7LGAgftY9YWkTyNGVqflTuzuB2tSc6p3w+aBhtNcMISp6vF6w==
28+
-----END CERTIFICATE-----
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIE0jCCAroCAQEwDQYJKoZIhvcNAQELBQAwQjELMAkGA1UEBhMCVVMxCzAJBgNV
3+
BAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24xFTATBgNVBAoMDHNwb3Rfd3JhcHBlcjAg
4+
Fw0yNDA0MTIxODEzMTNaGA8zMDIzMDgxNDE4MTMxM1owGjEYMBYGA1UEAwwPYXV0
5+
aC5zcG90LnJvYm90MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2nw4
6+
3Xcn7c+abxqqYTaYUUiF+v403h/pebChslYQunfpPNRpESqbUO+1zbQaL1YOkrhO
7+
DotaaB8JBn75zgzOghF29zCAQigaavFDZfnz+Q0ZzNQJLClY0cqtJDhC7TZVsn0b
8+
gp4R2FU+V6FS/fVq2+kX1G3TEseCLu1PgNBlLGrTrzFwCtyCLYnxzZtT2HYIGT/2
9+
cDK5ul5Muxxje5PcH9xRJgBKTyXLMLwP/sdBhkJwBEjW7GhNup+TIFUpvXuOZfc+
10+
UeC7QMlZwGJ7iu5dv+fm68AXe9HaKtnHZqMlMV9nivvdaaI0doVT3t2r4KE9MmE7
11+
3HfspJGiVgebSiB4E0jWnLTdw7GQ//3dLOqTj9MokT0m6pguhrBpw4Y6i0bGvw+g
12+
+33O9WJpPqb+Vshygek5fqto/HmJC2BPIQnNGNBfPT4f8hhttgs1uL/LUKxvkC4v
13+
9NQCY8xsm2HsleTqbkbDClJakzrRLLEfNoAjGJNUG6PAxhj287XS/RmlYi68pJsl
14+
9vo/zp+UUtJuIUkiMQhrlY72Gc9qCL2W2nUaZ6yCgrcGC5JFl5hmYuWE5Sg7R6pc
15+
rYu9xcjhtL/n+pgrndlsS53GfuA2+3VhpDuM/qarQX4L/8Jm9P82OqBKW1+HUHIQ
16+
aP4vGbeC6Y8ItX6vcrxN9gQAuBLhOBsgo1PFKAMCAwEAATANBgkqhkiG9w0BAQsF
17+
AAOCAgEADFU0YDJ/Uc7eQRzuj0fdH5tbpfk4bQo3hBu5PXX/ZNIe7q3vDs5iLyw+
18+
zoJmESiBl06lBqvC7/E0DJZSc+zmUVe41e4e8g/ZqlIMPDI3hnc+HPS3NH/Wt/IG
19+
OODUqthKvNZLxCJuiJ1hzAYxkQdQTgG+p2KtqF/FeuTGQva0OYqtUnfnwNf/eRt2
20+
2TeAagoJFG1MpmP6hQsc9wUxE5Zz7Ro30VvwMQrhQDl2336x0CxncB/OVovikE1p
21+
j7RhHIPvxfNj/KsSs4VZqxE2CnjOVsAcNIc0vkPeqKBOXmSq08s7ulZ/P3pyS7MI
22+
lW9iG5XiPMYjCU/JkmZy7wREhEgLEMvfciQTAAUTDC7HpDOVezPU0c87xaV18Vzk
23+
SucxtvkVqPD3ff8onG7qFVlop2ulHXVteaeTYsI0f41MS4z/GqfWjbUU9jd56HO5
24+
ZB9+VE8cNe9TC+uZoJMUO2dHtMjj4GIRxSgVaefZP14RPxr+uTgLBJOmnktdzPRL
25+
MLItvnoktMEjfP/dY5kjw2aGrGCP2IRoBXk2Juppiik6J7AMFtUrUOuAaWG961Zr
26+
OyuOW1THytEuaYm7PKKQSwo2PJYDVo9+LM8b//a2LrhdhFYzkZd4+YunSHGSvWAs
27+
5YQhbp/5mwhjm3L+FAFFA/RP5CpIy0VUJqQs5pEXWuSqWrTc0v4=
28+
-----END CERTIFICATE-----
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFZzCCA0+gAwIBAgIUa6msg8Z7PTIIoDePCBJiePqrHFowDQYJKoZIhvcNAQEL
3+
BQAwQjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24x
4+
FTATBgNVBAoMDHNwb3Rfd3JhcHBlcjAgFw0yNDA0MTIxNzMwNDNaGA8zMDIzMDgx
5+
NDE3MzA0M1owQjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk1BMQ8wDQYDVQQHDAZC
6+
b3N0b24xFTATBgNVBAoMDHNwb3Rfd3JhcHBlcjCCAiIwDQYJKoZIhvcNAQEBBQAD
7+
ggIPADCCAgoCggIBALEaiRb45Y1WCWA/J0oU84aZ4rXanPceyFldgGrA6GGoNVLl
8+
MNKyg2V5nElLgV+DsAigC0czNOoTyRlocZ8ekW1cPgTmsm42g+AReU2qPEzKYHPz
9+
6K0XbZ63vHUC0ox1sPqQIRPVamnAKQkU8TsCLwhuulqQLGKKqDooTGco9RQcY7UA
10+
Wzmwvo5rvxTmkBQxcmdw+qgDrbxXISmocIh4J/zl22LZawS+nHvW/HTl2tg9hYAY
11+
tDtpjW6U9HDjOPdkizDoZVbsJMKY6vIjujb7yaKh2ZuW2T//NH+2Vzxk4RKOcyox
12+
yCnZFxhIBPWHcLHD92ta/ZN7i7AsF7NrE3BVBXXlbe1hYpJTqAi8IMyLYdIeEeaD
13+
MGUwZa/vI5XVRLPl5UU6ECo8/9hj4/JDdJWC/EpU+d5C44DNljXpyFH6QRSf9gRj
14+
XXx4qWaWTbIeqlQNj1eGJGa8MM03WmjcouiHTOh8asK17zwyYYnrtGMX2CnAtiw5
15+
sxgaC2QcINh7ZgAClWEQhpi/fXR96JsgJF+/jCLosA+0PMPCJeKtkTxo441XTWNT
16+
ilKn1sJ7WIEZ9If0GdhuiW6to4vWoqQNkCSf1Mg/VjMcsJgui2l7ABJTBjoRHS/Z
17+
rMBZIApQkgXnaaMXgiXoMItAUJZ/fOWkOK+y7b1KmwSzClpJa/PMjgm1L2XfAgMB
18+
AAGjUzBRMB0GA1UdDgQWBBTF424r/sU/9OqWx1FyXtiYAqr7jjAfBgNVHSMEGDAW
19+
gBTF424r/sU/9OqWx1FyXtiYAqr7jjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
20+
DQEBCwUAA4ICAQA6xRBBSWxWnvxTtaCGgyfR/SVkBAFu+SLw8xTI1TiZb8Tzh0Gc
21+
ciS/vfo20eJ1+C5UEVmlMb/oxEewROkY7+RKCTlI7Vl0KD7Gz9HUpPz8o2POs43B
22+
5AvXLlqDknD+UP6QG+AR9UEdjNs8UAiv62gwghQMwafVwpltNIMk0cDILxBHh3K2
23+
dGONtuWrnwU0y1i+sAdIUKv+zCV/Mkyxkm31PzKnYQMFEggUxP4Pvu95KZily1O4
24+
WfUZzwZB6hN6Rp/mrxPgmDuGOqSLbJBSjDF8DN47kwFU1nlS8wOH5nn+3EbWjPzH
25+
4gB3IpETLLrQYqXawjC9x0KknDfIxKDhHMsRldQEUYBMFPmTXnM+mnWmXrvMk+/Q
26+
fxJo1fvDIv/3nuv939yEkWkM4m+OLQxhLnuu3NsVktau+7ivK8XN01Ytxq9fz3C9
27+
k1fOlQcwC7dBNXurBS2yd/PnR7l/oh/B93sQFuaZcIkJElSYVRbEEaueOlLpL16d
28+
oU3t/Rr5sNksA/EoQ/M6RpdesAulZsZ8CuHM6lPwlA9h+9jiNtyd84R7gWeh3JIU
29+
mhXsBqtSYWhUVB9Csa0+MBjrq8wLNcJcwxhedYS/9FPvmPu02APhTWja89+cPeGD
30+
Pi8O9F6nFbPhkYpczp+hYSV3dsoUw8ld4SOa7asfkpHlKSCSmZ8Eah1K3Q==
31+
-----END CERTIFICATE-----
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIE0DCCArgCAQEwDQYJKoZIhvcNAQELBQAwQjELMAkGA1UEBhMCVVMxCzAJBgNV
3+
BAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24xFTATBgNVBAoMDHNwb3Rfd3JhcHBlcjAg
4+
Fw0yNDA0MTIxODEzMjVaGA8zMDIzMDgxNDE4MTMyNVowGDEWMBQGA1UEAwwNaWQu
5+
c3BvdC5yb2JvdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANp8ON13
6+
J+3Pmm8aqmE2mFFIhfr+NN4f6XmwobJWELp36TzUaREqm1Dvtc20Gi9WDpK4Tg6L
7+
WmgfCQZ++c4MzoIRdvcwgEIoGmrxQ2X58/kNGczUCSwpWNHKrSQ4Qu02VbJ9G4Ke
8+
EdhVPlehUv31atvpF9Rt0xLHgi7tT4DQZSxq068xcArcgi2J8c2bU9h2CBk/9nAy
9+
ubpeTLscY3uT3B/cUSYASk8lyzC8D/7HQYZCcARI1uxoTbqfkyBVKb17jmX3PlHg
10+
u0DJWcBie4ruXb/n5uvAF3vR2irZx2ajJTFfZ4r73WmiNHaFU97dq+ChPTJhO9x3
11+
7KSRolYHm0ogeBNI1py03cOxkP/93Szqk4/TKJE9JuqYLoawacOGOotGxr8PoPt9
12+
zvViaT6m/lbIcoHpOX6raPx5iQtgTyEJzRjQXz0+H/IYbbYLNbi/y1Csb5AuL/TU
13+
AmPMbJth7JXk6m5GwwpSWpM60SyxHzaAIxiTVBujwMYY9vO10v0ZpWIuvKSbJfb6
14+
P86flFLSbiFJIjEIa5WO9hnPagi9ltp1GmesgoK3BguSRZeYZmLlhOUoO0eqXK2L
15+
vcXI4bS/5/qYK53ZbEudxn7gNvt1YaQ7jP6mq0F+C//CZvT/NjqgSltfh1ByEGj+
16+
Lxm3gumPCLV+r3K8TfYEALgS4TgbIKNTxSgDAgMBAAEwDQYJKoZIhvcNAQELBQAD
17+
ggIBAA/EZkC3jGHn0KqScCcZ/yFX87eGiGvCPfUyXxOYyxMfxqZGrAr6VgxAguWs
18+
vnIV8sQU6lpTPGaakM2Z/8AnzXeCFoYD7Gh8nsiZiKZnocrG92q7TuFgWigSUv9h
19+
QhCX5DGWC1vpe9Y9CLnrtd/78g2YBCZ6I1uZv/D1uRjML/LZsJ+/KQia6v7w8L9P
20+
3Sv4A7rT6oarnhQGPgB2CtxWL0wQI3LBCy0E5jE2/XJAmOUd6gr8g6Qs49tTQmU1
21+
T+vZyyDGLhBrok3NTNddC9Z118E9LCZ+UaE6Q5Qx7IvHhjvODfp9hzGkuMfjmiDA
22+
EGab5qzcoFhveu1MpbysbajURrxR0XgHPVZeCf94s8OYRwE1v5Ky2G20N10npdJM
23+
pX16L8eg/DfY9aWdoSDPt/A9/5d0Oxh25h4kZGMPuaKce66hNQanMbKH4fr2h9OR
24+
POlf5KwaMYtY6V2YcDHeBBHsG342tngXa9JEvaotww824d6FcYgfxOks08x6V5UU
25+
mOwG4RJCwO/zaQ2bRrYE4IdvB5z6ZaJ6CZmvc4nFXgPzzhBq0dTPZdZZMyWg/haG
26+
XDV+oBC2iePiWma0PnW0DkyvD1WhcWbeD3CWEMuf+kPkqpZVYCy0UqVxBFtBLUn7
27+
z7m4oqur/7YXC+kRwxdF0KoMdTzfaWNyP8ol7CR3BcQUfXTj
28+
-----END CERTIFICATE-----
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIE4jCCAsoCAQEwDQYJKoZIhvcNAQELBQAwQjELMAkGA1UEBhMCVVMxCzAJBgNV
3+
BAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24xFTATBgNVBAoMDHNwb3Rfd3JhcHBlcjAg
4+
Fw0yNDA0MTIxODEzNDJaGA8zMDIzMDgxNDE4MTM0MlowKjEoMCYGA1UEAwwfcGF5
5+
bG9hZC1yZWdpc3RyYXRpb24uc3BvdC5yb2JvdDCCAiIwDQYJKoZIhvcNAQEBBQAD
6+
ggIPADCCAgoCggIBANp8ON13J+3Pmm8aqmE2mFFIhfr+NN4f6XmwobJWELp36TzU
7+
aREqm1Dvtc20Gi9WDpK4Tg6LWmgfCQZ++c4MzoIRdvcwgEIoGmrxQ2X58/kNGczU
8+
CSwpWNHKrSQ4Qu02VbJ9G4KeEdhVPlehUv31atvpF9Rt0xLHgi7tT4DQZSxq068x
9+
cArcgi2J8c2bU9h2CBk/9nAyubpeTLscY3uT3B/cUSYASk8lyzC8D/7HQYZCcARI
10+
1uxoTbqfkyBVKb17jmX3PlHgu0DJWcBie4ruXb/n5uvAF3vR2irZx2ajJTFfZ4r7
11+
3WmiNHaFU97dq+ChPTJhO9x37KSRolYHm0ogeBNI1py03cOxkP/93Szqk4/TKJE9
12+
JuqYLoawacOGOotGxr8PoPt9zvViaT6m/lbIcoHpOX6raPx5iQtgTyEJzRjQXz0+
13+
H/IYbbYLNbi/y1Csb5AuL/TUAmPMbJth7JXk6m5GwwpSWpM60SyxHzaAIxiTVBuj
14+
wMYY9vO10v0ZpWIuvKSbJfb6P86flFLSbiFJIjEIa5WO9hnPagi9ltp1GmesgoK3
15+
BguSRZeYZmLlhOUoO0eqXK2LvcXI4bS/5/qYK53ZbEudxn7gNvt1YaQ7jP6mq0F+
16+
C//CZvT/NjqgSltfh1ByEGj+Lxm3gumPCLV+r3K8TfYEALgS4TgbIKNTxSgDAgMB
17+
AAEwDQYJKoZIhvcNAQELBQADggIBAAQ1Fk6Gh1OoSRi7GUHTviJ9r2FcdjkgyMYp
18+
E1JFiKYkkpwXAqhLeE0CEmTvdTLqo9SAfY5YkA6pJpr3LZ9Ns3Kcd35BUlHA5QF9
19+
EgNzJkjvKDCnxWlVhoVRwK9Mff0Twe3ANtUI9WHfvqNgLAFhX1RjipcDBsmyJRk6
20+
TDeCXbU5cFf/c+wqCeRi5Abu8FNkqEtr3YypL5CjZX/UtCXNVkifjZsL5ayAaQ8L
21+
bea05Y7gPPgWQVNNAPAQDrsAQeLGPIg5hSD+SjEGsq3+GaP0cVG/GBiWR4c4rfX4
22+
+OoO+8krm6YTovITuIzqjVuZ/mUKyqutyexx5MB3Rjy9cgW7TGcWvadyVCveRaZB
23+
QjkfYqLg2HVVAi3dwwOacAAmd5aKDplyx9OraIBj79PBTCeD3uJ9ZiG7aukHRe2l
24+
bm6fyS1Y9rQ5dwCyoRpJSfci7qMq8YUQxeLwO3WAZkBKeDd/qzpqEdtsD9FQB798
25+
1y+ZqNeIlppAbpMJR83pbAiewihsD+1+nJ/paceCGqrqI6hSDPYlAUWelHvwmb5k
26+
gSss4F2F+N2MNu/L1B0a6v1YI0478IRHF/vvZCbDXUMefPqCmIvW+tsMv58jApop
27+
lgYviX3aJKO+NasNF/Lp5XUQMVOvF6ajLRaJPkWV6plenWr1DyhoP4kOZXY7Gpd9
28+
yJ3X4n2r
29+
-----END CERTIFICATE-----
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
-----BEGIN PRIVATE KEY-----
2+
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
51+
960g90lE5bLBOFWNQM4UxWWf9RqH9g==
52+
-----END PRIVATE KEY-----

spot_wrapper/testing/fixtures.py

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@
33
import concurrent.futures
44
import dataclasses
55
import functools
6-
import inspect
6+
import pathlib
77
import typing
88

99
import grpc
1010
import pytest
1111

12+
from spot_wrapper.testing.credentials import (
13+
DEFAULT_TESTING_CERTIFICATES,
14+
SpotSSLCertificates,
15+
)
1216
from spot_wrapper.testing.mocks import BaseMockSpot
1317

1418

@@ -25,6 +29,7 @@ class SpotFixture:
2529

2630
address: str
2731
port: int
32+
certificate_path: pathlib.Path
2833
api: BaseMockSpot
2934

3035

@@ -33,6 +38,7 @@ def fixture(
3338
*,
3439
address: str = "127.0.0.1",
3540
max_workers: int = 10,
41+
certificates: SpotSSLCertificates = DEFAULT_TESTING_CERTIFICATES,
3642
**kwargs: typing.Any,
3743
) -> typing.Callable:
3844
"""
@@ -54,35 +60,31 @@ def fixture(
5460
"""
5561

5662
def decorator(cls: typing.Type[BaseMockSpot]) -> typing.Callable:
57-
def fixturefunc(monkeypatch, **kwargs) -> typing.Iterator[SpotFixture]:
63+
def fixturefunc(**kwargs) -> typing.Iterator[SpotFixture]:
5864
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as thread_pool:
5965
server = grpc.server(thread_pool)
60-
port = server.add_insecure_port(f"{address}:0")
66+
robot_certificate_key = certificates.robot_certificate_key_path.read_bytes()
67+
server_credentials = grpc.ssl_server_credentials(
68+
[
69+
(robot_certificate_key, certificate_path.read_bytes())
70+
for certificate_path in certificates.robot_certificate_paths
71+
]
72+
)
73+
port = server.add_secure_port(f"{address}:0", server_credentials)
6174
with cls(**kwargs) as mock:
6275
mock.add_to(server)
6376
server.start()
6477
try:
65-
with monkeypatch.context() as m:
66-
67-
def mock_secure_channel(target, _, *args, **kwargs):
68-
return grpc.insecure_channel(target, *args, **kwargs)
69-
70-
m.setattr(grpc, "secure_channel", mock_secure_channel)
71-
yield SpotFixture(address=address, port=port, api=mock)
78+
yield SpotFixture(
79+
address=address,
80+
port=port,
81+
api=mock,
82+
certificate_path=certificates.root_certificate_path,
83+
)
7284
finally:
7385
server.stop(grace=None)
7486

7587
functools.update_wrapper(fixturefunc, cls)
76-
sig = inspect.signature(fixturefunc)
77-
if "monkeypatch" not in sig.parameters:
78-
sig = sig.replace(
79-
parameters=(
80-
inspect.Parameter("monkeypatch", inspect.Parameter.POSITIONAL_OR_KEYWORD),
81-
*sig.parameters.values(),
82-
)
83-
)
84-
fixturefunc.__signature__ = sig # noqa
85-
8688
return pytest.fixture(fixturefunc, **kwargs)
8789

8890
if cls is None:

spot_wrapper/tests/test_wrapper.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def simple_spot_wrapper(simple_spot: SpotFixture) -> Iterator[SpotWrapper]:
6060
hostname=simple_spot.address,
6161
port=simple_spot.port,
6262
robot_name=simple_spot.api.name,
63+
cert_resource_glob=str(simple_spot.certificate_path),
6364
logger=logging.getLogger("spot"),
6465
)
6566
ok, message = spot_wrapper.claim()

spot_wrapper/wrapper.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ def __init__(
340340
continually_try_stand: bool = True,
341341
rgb_cameras: bool = True,
342342
payload_credentials_file: str = None,
343+
cert_resource_glob: typing.Optional[str] = None,
343344
) -> None:
344345
"""
345346
Args:
@@ -391,7 +392,7 @@ def __init__(
391392
self._command_data = RobotCommandData()
392393

393394
try:
394-
self._sdk = create_standard_sdk(SPOT_CLIENT_NAME)
395+
self._sdk = create_standard_sdk(SPOT_CLIENT_NAME, cert_resource_glob=cert_resource_glob)
395396
except Exception as e:
396397
self._logger.error("Error creating SDK object: %s", e)
397398
self._valid = False

0 commit comments

Comments
 (0)