summaryrefslogtreecommitdiffstats
path: root/.github/workflows/test-cow-fuse.yml
blob: 9b425323748ec1aa94e95c1b160911b3897d6b02 (plain) (blame)
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
name: test fuse cow
on: push
env:
  ASAN_OPTIONS: leak_check_at_exit=false
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup dotnet
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '8.x.x'
      - name: Install dnbd3 dependencies
        working-directory: ${{ github.workspace }}
        run: |
          for i in 1 2 3 4; do sudo apt-get update -y -qq && break; sleep 5; done
          for i in 1 2 3 4; do sudo apt-get install -y -qq make \
                                      clang-format \
                                      linux-headers-generic \
                                      libfuse-dev \
                                      libjansson-dev \
                                      libcurl4-openssl-dev && break; sleep 5; done
      - name: Configure dnbd3 build
        run: |
          cmake -B ${{ github.workspace }}/build \
                -S ${{ github.workspace }} \
                -D CMAKE_BUILD_TYPE=${{ matrix.config.build-type }} \
                -D CMAKE_C_FLAGS=-fsanitize=address \
                -D DNBD3_KERNEL_MODULE=OFF \
                -D DNBD3_BENCHMARK=OFF \
                -D DNBD3_CLIENT_FUSE=ON \
                -D DNBD3_CLIENT_FUSE_COW_TEST=ON \
                -D DNBD3_SERVER=ON \
                -D DNBD3_SERVER_FUSE=OFF \
                -D DNBD3_SERVER_AFL=OFF \
                -D DNBD3_SERVER_DEBUG_LOCKS=OFF \
                -D DNBD3_SERVER_DEBUG_THREADS=OFF \
                -D DNBD3_RELEASE_HARDEN=OFF \
                -D DNBD3_PACKAGE_DOCKER=OFF

      - name: Build dnbd3 artifacts
        working-directory: ${{ github.workspace }}/build
        run: make
      - name: Get cow_merger_service
        working-directory: ${{ github.workspace }}
        run: git clone --depth 1  --branch "master" "https://github.com/z0Kng/cow_merger_service.git" "../cow_server"
      - name: Build cow_merger_service
        working-directory: ${{ github.workspace }}/../cow_server/cow_merger_service
        run: dotnet publish -c Release -o publish -p:PublishReadyToRun=true -p:PublishSingleFile=true -p:PublishReadyToRunShowWarnings=true --self-contained true --runtime linux-x64
      - name: Setup cow_merger_service
        working-directory: ${{ github.workspace }}/../cow_server/
        run: |
          sudo mkdir -m 777 /mnt/work
          mkdir /mnt/work/WorkingDirectory
          mkdir /mnt/work/OriginalImageDirectory
          mkdir /mnt/work/Output
          sed -i 's/^        "WorkingDirectory":.*/        "WorkingDirectory": "\/mnt\/work\/WorkingDirectory",/g'  cow_merger_service/publish/appsettings.json
          sed -i 's/^        "OriginalImageDirectory":.*/        "OriginalImageDirectory": "\/mnt\/work\/OriginalImageDirectory",/g' cow_merger_service/publish/appsettings.json
          sed -i 's/^        "DestinationDirectory":.*/        "DestinationDirectory": "\/mnt\/work\/Output",/g'  cow_merger_service/publish/appsettings.json
          while read line; do echo $line; done < cow_merger_service/publish/appsettings.json
          cd cow_merger_service/publish/
          FILENAME=cow_merger_service
          FILESIZE=$(stat -c%s "$FILENAME")
          echo "Size of $FILENAME = $FILESIZE bytes."
          ./cow_merger_service &> log.out &
      - name: Generate test file
        working-directory: ${{ github.workspace }}/build/src/cowtest
        run: ./dnbd3-fuse-cow-test -c /mnt/work/OriginalImageDirectory/test.r1
      - name: Setup dnbd3 server
        working-directory: ${{ github.workspace }}
        run: |
          mkdir /mnt/work/dnbd3-server-config/
          cp pkg/config/server.conf /mnt/work/dnbd3-server-config/
          sed -i "s/^basePath=.*/basePath=\/mnt\/work\/OriginalImageDirectory/g" /mnt/work/dnbd3-server-config/server.conf
          cd build/src/server
          ./dnbd3-server --config /mnt/work/dnbd3-server-config/
          sleep 5
      - name: Run standard test
        working-directory: ${{ github.workspace }}/build/src
        run: |
          mkdir /mnt/work/mount
          mkdir /mnt/work/tmp
          mkdir /mnt/work/logs
          ./fuse/dnbd3-fuse "/mnt/work/mount" -f -h localhost -i test -c "/mnt/work/tmp" -C localhost:5000 --cow-stats-stdout --cow-stats-file &> /mnt/work/logs/standardLog1.out &
          PID=$!
          sleep 5
          echo PID: $PID
          ./cowtest/dnbd3-fuse-cow-test -t "/mnt/work/mount/img"
          echo unmounting: $PID
          sudo umount /mnt/work/mount
          wait $PID
          echo unmounted
          ./fuse/dnbd3-fuse "/mnt/work/mount" -f -h localhost -i test -L "/mnt/work/tmp" -C localhost:5000 --merge --cow-stats-stdout --cow-stats-file &> /mnt/work/logs/standardLog2.out &
          PID=$!
          sleep 5
          echo PID: $PID
          ./cowtest/dnbd3-fuse-cow-test -v "/mnt/work/mount/img"
          echo unmounting: $PID
          sudo umount /mnt/work/mount
          wait $PID
          echo unmounted
          sleep 30
          echo Output: $(ls /mnt/work/Output)
          ./cowtest/dnbd3-fuse-cow-test -v /mnt/work/Output/test.r2
          rm /mnt/work/Output/test.r2
          rm -rf /mnt/work/tmp
      - name: Run random test
        working-directory: ${{ github.workspace }}/build/src
        run: |
          cp /mnt/work/OriginalImageDirectory/test.r1 /mnt/work/
          mkdir /mnt/work/tmp
          ./fuse/dnbd3-fuse "/mnt/work/mount" -f -h localhost -i test -c "/mnt/work/tmp" -C localhost:5000 --cow-stats-stdout --cow-stats-file &> /mnt/work/logs/randomLog1.out &
          PIDFUSE=$!
          sleep 5
          echo PIDFUSE : $PIDFUSE
          ./cowtest/dnbd3-fuse-cow-test --randomTest "/mnt/work/mount/img" "/mnt/work/test.r1" &> /mnt/work/logs/randomTestLog1.out &
          PIDTEST=$!
          sleep 60
          echo "stopping test"
          kill -INT $PIDTEST
          wait $PIDTEST
          echo "testStopped"
          echo unmounting: $PIDFUSE
          sudo umount /mnt/work/mount
          echo unmounted
          wait $PIDFUSE
          ./fuse/dnbd3-fuse "/mnt/work/mount" -f -h localhost -i test -L "/mnt/work/tmp" -C localhost:5000 --merge --cow-stats-stdout --cow-stats-file &> /mnt/work/logs/randomLog2.out &
          PIDFUSE=$!
          sleep 5
          echo PIDFUSE : $PIDFUSE
          ./cowtest/dnbd3-fuse-cow-test --compare "/mnt/work/mount/img" "/mnt/work/test.r1"
          echo unmounting: $PIDFUSE
          sudo umount /mnt/work/mount
          echo unmounted
          wait $PIDFUSE
          sleep 30
          echo Output: $(ls /mnt/work/Output)
          ./cowtest/dnbd3-fuse-cow-test --compare "/mnt/work/Output/test.r2" "/mnt/work/test.r1"
      - name: Print logs
        if: always()
        run: |
          tail -n+0 \
            /mnt/work/logs/standardLog1.out \
            /mnt/work/logs/standardLog2.out \
            /mnt/work/logs/randomLog1.out \
            /mnt/work/logs/randomTestLog1.out \
            /mnt/work/logs/randomLog2.out \
            /mnt/work/tmp/status.txt \
            ${{ github.workspace }}/build/src/server/dnbd3.log \
            ${{ github.workspace }}/../cow_server/cow_merger_service/publish/log.out