can sync file!
integration test works
This commit is contained in:
parent
0af5811c96
commit
afb1a2f7bd
4
.env
4
.env
|
@ -1,4 +1,4 @@
|
||||||
SYNCTHING_VERSION=latest
|
SYNCTHING_VERSION=latest
|
||||||
PUID=1001
|
PUID=0
|
||||||
PGID=1001
|
PGID=0
|
||||||
TZ=Europe/London
|
TZ=Europe/London
|
||||||
|
|
|
@ -17,9 +17,9 @@ services:
|
||||||
build: .
|
build: .
|
||||||
links:
|
links:
|
||||||
- sync1:sync
|
- sync1:sync
|
||||||
|
- etcd
|
||||||
volumes:
|
volumes:
|
||||||
- sync1config:/config
|
- sync1config:/config
|
||||||
- etcd
|
|
||||||
environment:
|
environment:
|
||||||
- SYNCTHING_PUBLIC_HOST=sync1
|
- SYNCTHING_PUBLIC_HOST=sync1
|
||||||
networks:
|
networks:
|
||||||
|
|
3
integration-test.bat
Normal file
3
integration-test.bat
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
docker-compose -f docker-compose.test.yml -p ci down -v
|
||||||
|
docker-compose -f docker-compose.test.yml -p ci up --build --force-recreate -d
|
||||||
|
docker wait ci_test_1
|
5
integration-test.sh
Normal file
5
integration-test.sh
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
docker-compose -f docker-compose.test.yml -p ci down -v
|
||||||
|
docker-compose -f docker-compose.test.yml -p ci up --build --force-recreate -d
|
||||||
|
docker wait ci_test_1
|
|
@ -4,6 +4,8 @@ RUN apt-get update && apt-get install -yq curl && apt-get clean
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
ADD test.sh /app/test.sh
|
ADD test_file_sync.sh /app/test_file_sync.sh
|
||||||
|
|
||||||
CMD ["bash", "test.sh"]
|
VOLUME [ "/data1", "/data2" ]
|
||||||
|
|
||||||
|
CMD ["bash", "test_file_sync.sh"]
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
sleep 5
|
|
||||||
echo "test string" > /sync1/testfile
|
|
||||||
echo /sync1/testfile
|
|
||||||
echo /sync2/testfile
|
|
||||||
|
|
||||||
#if curl web | grep -q '<b>Visits:</b> '; then
|
|
||||||
# echo "Tests passed!"
|
|
||||||
# exit 0
|
|
||||||
#else
|
|
||||||
# echo "Tests failed!"
|
|
||||||
# exit 1
|
|
||||||
#fi
|
|
9
integrationtest/test_file_sync.sh
Normal file
9
integrationtest/test_file_sync.sh
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
TEST_TEXT="test string"
|
||||||
|
|
||||||
|
echo "${TEST_TEXT}" > /data1/testfile
|
||||||
|
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
for i in $(seq 1 30); do
|
||||||
|
[ "${TEST_TEXT}" == "$(cat /data2/testfile)" ] && s=0 && break || s=$? && sleep 2
|
||||||
|
done
|
||||||
|
(exit $s)
|
|
@ -47,6 +47,12 @@ class Program:
|
||||||
self.my_device_id = self.syncthing.get_my_device_id()
|
self.my_device_id = self.syncthing.get_my_device_id()
|
||||||
print("Found My Device ID: {0}".format(self.my_device_id))
|
print("Found My Device ID: {0}".format(self.my_device_id))
|
||||||
|
|
||||||
|
self.syncthing.patch_config()
|
||||||
|
self.syncthing.create_shared_folder("GXWxf-3zgnU", "SharedFolder", "/data", [{'id': self.my_device_id}])
|
||||||
|
|
||||||
|
if not self.syncthing.config_is_in_sync():
|
||||||
|
self.syncthing.restart()
|
||||||
|
|
||||||
self.etcd.register_device_update_handler(self.update_devices)
|
self.etcd.register_device_update_handler(self.update_devices)
|
||||||
self.etcd.add_device_to_cluster(self.my_device_id, self.syncthing_public_host)
|
self.etcd.add_device_to_cluster(self.my_device_id, self.syncthing_public_host)
|
||||||
|
|
||||||
|
@ -62,8 +68,12 @@ class Program:
|
||||||
def update_devices(self, event):
|
def update_devices(self, event):
|
||||||
device_list = self.etcd.get_device_list()
|
device_list = self.etcd.get_device_list()
|
||||||
self.syncthing.add_devices(device_list)
|
self.syncthing.add_devices(device_list)
|
||||||
|
self.syncthing.create_shared_folder("GXWxf-3zgnU", "SharedFolder", "/data", device_list)
|
||||||
self.syncthing.print_config()
|
self.syncthing.print_config()
|
||||||
|
|
||||||
|
if not self.syncthing.config_is_in_sync():
|
||||||
|
self.syncthing.restart()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -48,10 +48,87 @@ class SyncthingClient:
|
||||||
|
|
||||||
print("Attempt to add device {0} to syncthing: {1}".format(device, response.content))
|
print("Attempt to add device {0} to syncthing: {1}".format(device, response.content))
|
||||||
|
|
||||||
|
def create_shared_folder(self, folder_id, label, path, devices):
|
||||||
|
post_data = {
|
||||||
|
"id": folder_id,
|
||||||
|
"label": label,
|
||||||
|
"filesystemType": "basic",
|
||||||
|
"path": path,
|
||||||
|
"type": "sendreceive",
|
||||||
|
"devices": [],
|
||||||
|
"rescanIntervalS": 60,
|
||||||
|
"fsWatcherEnabled": False,
|
||||||
|
"fsWatcherDelayS": 10,
|
||||||
|
"ignorePerms": False,
|
||||||
|
"autoNormalize": False,
|
||||||
|
"minDiskFree": {
|
||||||
|
"value": 1,
|
||||||
|
"unit": "%"
|
||||||
|
},
|
||||||
|
"versioning": {
|
||||||
|
"type": "simple",
|
||||||
|
"params": {
|
||||||
|
"keep": "5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"copiers": 0,
|
||||||
|
"pullerMaxPendingKiB": 0,
|
||||||
|
"hashers": 0,
|
||||||
|
"order": "random",
|
||||||
|
"ignoreDelete": False,
|
||||||
|
"scanProgressIntervalS": 0,
|
||||||
|
"pullerPauseS": 0,
|
||||||
|
"maxConflicts": 10,
|
||||||
|
"disableSparseFiles": False,
|
||||||
|
"disableTempIndexes": False,
|
||||||
|
"paused": False,
|
||||||
|
"weakHashThresholdPct": 25,
|
||||||
|
"markerName": ".stfolder",
|
||||||
|
"copyOwnershipFromParent": False,
|
||||||
|
"modTimeWindowS": 0
|
||||||
|
}
|
||||||
|
|
||||||
|
for device in devices:
|
||||||
|
folder_device = {
|
||||||
|
'deviceID': device['id'],
|
||||||
|
'introducedBy': ''
|
||||||
|
}
|
||||||
|
post_data['devices'].append(folder_device)
|
||||||
|
|
||||||
|
response = requests.post(self.make_url("/rest/config/folders"),
|
||||||
|
headers=self.headers, data=json.dumps(post_data))
|
||||||
|
|
||||||
|
print("Attempt to add shared folder to syncthing: {0}".format(response.content))
|
||||||
|
|
||||||
@retry
|
@retry
|
||||||
def print_config(self):
|
def print_config(self):
|
||||||
response = requests.get(self.make_url("/rest/config/devices"), headers=self.headers)
|
response = requests.get(self.make_url("/rest/config/devices"), headers=self.headers)
|
||||||
print("/rest/config/devices: {0}".format(response.content))
|
print("/rest/config/devices: {0}".format(response.content))
|
||||||
|
response = requests.get(self.make_url("/rest/config/folders"), headers=self.headers)
|
||||||
|
print("/rest/config/folders: {0}".format(response.content))
|
||||||
|
response = requests.get(self.make_url("/rest/config/options"), headers=self.headers)
|
||||||
|
print("/rest/config/options: {0}".format(response.content))
|
||||||
|
|
||||||
|
def config_is_in_sync(self):
|
||||||
|
response = requests.get(self.make_url("/rest/config/insync"), headers=self.headers)
|
||||||
|
return bool(json.loads(response.content)['configInSync'])
|
||||||
|
|
||||||
|
def restart(self):
|
||||||
|
response = requests.post(self.make_url("/rest/system/restart"), headers=self.headers, data='')
|
||||||
|
print("System reset: {0}".format(response.content))
|
||||||
|
|
||||||
|
|
||||||
|
@retry
|
||||||
|
def patch_config(self):
|
||||||
|
config_patch = {
|
||||||
|
"globalAnnounceEnabled": False,
|
||||||
|
"localAnnounceEnabled": False,
|
||||||
|
"relaysEnabled": False,
|
||||||
|
"announceLANAddresses": False,
|
||||||
|
}
|
||||||
|
response = requests.patch(self.make_url("/rest/config/options"),
|
||||||
|
headers=self.headers, data=json.dumps(config_patch))
|
||||||
|
print("Patched syncthing configuration: {0}".format(response.content))
|
||||||
|
|
||||||
def make_url(self, endpoint):
|
def make_url(self, endpoint):
|
||||||
return "http://{0}:{1}{2}".format(self.host, self.port, endpoint)
|
return "http://{0}:{1}{2}".format(self.host, self.port, endpoint)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user