can sync file!

integration test works
master
B.J. Dweck 2021-01-31 10:44:14 +02:00
parent 0af5811c96
commit afb1a2f7bd
9 changed files with 111 additions and 17 deletions

4
.env
View File

@ -1,4 +1,4 @@
SYNCTHING_VERSION=latest
PUID=1001
PGID=1001
PUID=0
PGID=0
TZ=Europe/London

View File

@ -17,9 +17,9 @@ services:
build: .
links:
- sync1:sync
- etcd
volumes:
- sync1config:/config
- etcd
environment:
- SYNCTHING_PUBLIC_HOST=sync1
networks:

3
integration-test.bat Normal file
View 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
View 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

View File

@ -4,6 +4,8 @@ RUN apt-get update && apt-get install -yq curl && apt-get clean
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"]

View File

@ -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

View 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)

View File

@ -47,6 +47,12 @@ class Program:
self.my_device_id = self.syncthing.get_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.add_device_to_cluster(self.my_device_id, self.syncthing_public_host)
@ -62,8 +68,12 @@ class Program:
def update_devices(self, event):
device_list = self.etcd.get_device_list()
self.syncthing.add_devices(device_list)
self.syncthing.create_shared_folder("GXWxf-3zgnU", "SharedFolder", "/data", device_list)
self.syncthing.print_config()
if not self.syncthing.config_is_in_sync():
self.syncthing.restart()
if __name__ == "__main__":
main()

View File

@ -48,10 +48,87 @@ class SyncthingClient:
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
def print_config(self):
response = requests.get(self.make_url("/rest/config/devices"), headers=self.headers)
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):
return "http://{0}:{1}{2}".format(self.host, self.port, endpoint)