<div dir="ltr"><div><div> test/proxy-cache/Makefile |  29 ++++++++++++++<br></div><div> test/proxy-cache/loop.sh  |   8 ++++</div><div> test/proxy-cache/run.sh   | 100 ++++++++++++++++++++++++++++++++++++++++++++++</div><div> test/zdtm.py              |  30 +++++++++++++-</div><div> 4 files changed, 166 insertions(+), 1 deletion(-)</div><div><br></div><div>    Add testcases for image-proxy/image-cache.</div><div>    </div><div>    Signed-off-by: Rodrigo Bruno &lt;<a href="mailto:rbruno@gsd.inesc-id.pt">rbruno@gsd.inesc-id.pt</a>&gt;</div><div>    Signed-off-by: Katerina Koukiou &lt;<a href="mailto:k.koukiou@gmail.com">k.koukiou@gmail.com</a>&gt;</div><div><br></div><div>diff --git a/test/proxy-cache/Makefile b/test/proxy-cache/Makefile</div><div>new file mode 100644</div><div>index 0000000..674c493</div><div>--- /dev/null</div><div>+++ b/test/proxy-cache/Makefile</div><div>@@ -0,0 +1,29 @@</div><div>+DIR<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>:= $(shell pwd)/data</div><div>+CRIU<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>:= $(DIR)/criu</div><div>+</div><div>+LOOP<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>:= $(DIR)/loop.sh</div><div>+PIDFILE := $(DIR)/loop.pid</div><div>+</div><div>+DUMPDIR<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>:= $(DIR)/dump</div><div>+PREDIR<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>:= $(DIR)/predump</div><div>+LOG<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>:= $(DIR)/log</div><div>+</div><div>+PROXY_CACHE_TCP_PORT<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>:= 9997</div><div>+LOCAL_CACHE_PATH<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>:= $(DIR)/image-cache.sock</div><div>+LOCAL_PROXY_PATH<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>:= $(DIR)/image-proxy.sock</div><div>+</div><div>+export DIR LOOP PIDFILE DUMPDIR PREDIR CRIU LOG PROXY_CACHE_TCP_PORT LOCAL_CACHE_PATH LOCAL_PROXY_PATH</div><div>+</div><div>+run: testdir</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>./run.sh</div><div>+</div><div>+testdir: ../../criu</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>mkdir -p $(DIR)</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>mkdir -p $(DUMPDIR)</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>mkdir -p $(PREDIR)</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>mkdir -p $(LOG)</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>cp ../../criu/criu $(CRIU)</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>cp loop.sh $(LOOP)</div><div>+</div><div>+clean:</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>rm -rf $(DIR)</div><div>diff --git a/test/proxy-cache/loop.sh b/test/proxy-cache/loop.sh</div><div>new file mode 100755</div><div>index 0000000..a5fcb08</div><div>--- /dev/null</div><div>+++ b/test/proxy-cache/loop.sh</div><div>@@ -0,0 +1,8 @@</div><div>+#!/bin/bash</div><div>+</div><div>+echo $$ &gt; $<a href="http://1.int">1.int</a></div><div>+mv $<a href="http://1.int">1.int</a> $1</div><div>+</div><div>+while :; do</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>sleep 1</div><div>+done</div><div>diff --git a/test/proxy-cache/run.sh b/test/proxy-cache/run.sh</div><div>new file mode 100755</div><div>index 0000000..e403d5f</div><div>--- /dev/null</div><div>+++ b/test/proxy-cache/run.sh</div><div>@@ -0,0 +1,100 @@</div><div>+#!/bin/bash</div><div>+</div><div>+set -x</div><div>+</div><div>+PID=</div><div>+</div><div>+function run {</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>echo &quot;== Run ${LOOP}&quot;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>echo ${PIDFILE}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>rm -f ${PIDFILE}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>setsid ${LOOP} ${PIDFILE} &lt; /dev/null &amp;&gt; /dev/null &amp;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>for i in `seq 100`; do</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>test -f ${PIDFILE} &amp;&amp; break</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>sleep 1</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>done</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>PID=`cat ${PIDFILE}`</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>echo ${PID}</div><div>+}</div><div>+</div><div>+function prepare {</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>${CRIU} image-cache -d -vvvv -o ${LOG}/image-cache.log \</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                                                </span>--port ${PROXY_CACHE_TCP_PORT} --images-dir $1</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>sleep 1</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>${CRIU} image-proxy -d -vvvv -o ${LOG}/image-proxy.log \</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                                                </span>--address localhost \</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                                                </span>--port ${PROXY_CACHE_TCP_PORT} --images-dir $1</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>sleep 1</div><div>+}</div><div>+</div><div>+function predump {</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>echo &quot;== Predump ${PID}&quot;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>${CRIU} pre-dump -vvvv --tree ${PID} --images-dir ${PREDIR} \</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                                        </span> -o ${LOG}/predump.log \</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                                        </span> --remote</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>return $?</div><div>+}</div><div>+</div><div>+function dump {</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>echo &quot;== Dump ${PID}&quot;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>${CRIU} dump -vvvv --tree ${PID} --images-dir ${DUMPDIR} \</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>-o ${LOG}/dump.log --prev-images-dir ${PREDIR} --track-mem \</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>--remote</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>return $?</div><div>+}</div><div>+</div><div>+function restore {</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>echo &quot;== Restore ${DUMPDIR}&quot;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>${CRIU} restore -vvvv --images-dir ${DUMPDIR} --restore-detached \</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>-o ${LOG}/restore.log \</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>--remote</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>return $?</div><div>+}</div><div>+</div><div>+function result {</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>local BGRED=&#39;\033[41m&#39;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>local BGGREEN=&#39;\033[42m&#39;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>local NORMAL=$(tput sgr0)</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>if [ $1 -ne 0 ]; then</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>echo -e &quot;${BGRED}FAIL${NORMAL}&quot;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>exit 1</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>else</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>echo -e &quot;${BGGREEN}PASS${NORMAL}&quot;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>fi</div><div>+}</div><div>+</div><div>+function test_dump_restore {</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>echo &quot;==== Check if dump-restore works with proxy-cache&quot;</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>run</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>test -d ${DUMPDIR} &amp;&amp; rm -rf ${DUMPDIR}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>mkdir -p ${DUMPDIR}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>prepare ${DUMPDIR}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>dump; result $(($?))</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>restore ; result $(($?))</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>kill -SIGKILL ${PID}</div><div>+}</div><div>+</div><div>+function test_predump_dump_restore {</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>echo &quot;==== Check if predump-dump-restore works with proxy-cache&quot;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>run</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>test -d ${PREDIR} &amp;&amp; rm -rf ${PREDIR}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>mkdir -p ${PREDIR}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>prepare ${PREDIR}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>predump; result $(($?))</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>test -d ${DUMPDIR} &amp;&amp; rm -rf ${DUMPDIR}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>mkdir -p ${DUMPDIR}</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>ln -s ${PREDIR}&quot;/img-proxy.sock&quot; ${DUMPDIR}&quot;/img-proxy.sock&quot;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>ln -s ${PREDIR}&quot;/img-cache.sock&quot; ${DUMPDIR}&quot;/img-cache.sock&quot;</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>dump; result $(($?))</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>restore ; result $(($?))</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>kill -SIGKILL ${PID}</div><div>+}</div><div>+</div><div>+test_dump_restore</div><div>+sleep 1</div><div>+test_predump_dump_restore</div><div>diff --git a/test/zdtm.py b/test/zdtm.py</div><div>index 7cd9dc4..8d389a3 100755</div><div>--- a/test/zdtm.py</div><div>+++ b/test/zdtm.py</div><div>@@ -777,6 +777,7 @@ class criu:</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>self.__mdedup = (opts[&#39;noauto_dedup&#39;] and True or False)</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>self.__user = (opts[&#39;user&#39;] and True or False)</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>self.__leave_stopped = (opts[&#39;stop&#39;] and True or False)</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>self.__remote = (opts[&#39;remote&#39;] and True or False)</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>self.__criu = (opts[&#39;rpc&#39;] and criu_rpc or criu_cli)</div><div> </div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">        </span>def logs(self):</div><div>@@ -884,6 +885,29 @@ class criu:</div><div> </div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>a_opts += self.__test.getdopts()</div><div> </div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>if self.__remote:</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>from subprocess import check_output</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>logdir = os.getcwd() + &quot;/&quot; + self.__dump_path + &quot;/&quot; + str(self.__iter)</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>print &quot;Adding image cache&quot;</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>cache_opts = [criu_bin, &quot;image-cache&quot;, &quot;--port&quot;, &quot;12345&quot;, &quot;-v4&quot;, &quot;-o&quot;,</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                                </span>      logdir + &quot;/image-cache.log&quot;, &quot;-D&quot;, logdir]</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>cpid = subprocess.Popen(cache_opts).pid</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>time.sleep(1)</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>print &quot;Adding image proxy&quot;</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>proxy_opts = [criu_bin, &quot;image-proxy&quot;, &quot;--port&quot;, &quot;12345&quot;, &quot;--address&quot;,</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                                </span>      &quot;localhost&quot;, &quot;-v4&quot;, &quot;-o&quot;, logdir + &quot;/image-proxy.log&quot;,</div><div>+                                      &quot;-D&quot;, logdir]</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>ppid = subprocess.Popen(proxy_opts).pid</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>time.sleep(1)</div><div>+</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>a_opts += [&quot;--remote&quot;]</div><div>+</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>if self.__dedup:</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>a_opts += [&quot;--auto-dedup&quot;]</div><div> </div><div>@@ -923,6 +947,9 @@ class criu:</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>r_opts += [&#39;--empty-ns&#39;, &#39;net&#39;]</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>r_opts += [&#39;--action-script&#39;, os.getcwd() + &#39;/empty-netns-prep.sh&#39;]</div><div> </div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>if self.__remote:</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                        </span>r_opts += [&quot;--remote&quot;]</div><div>+</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>self.__prev_dump_iter = None</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>criu_dir = os.path.dirname(os.getcwd())</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>if os.getenv(&quot;GCOV&quot;):</div><div>@@ -1362,7 +1389,7 @@ class launcher:</div><div> </div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>nd = (&#39;nocr&#39;, &#39;norst&#39;, &#39;pre&#39;, &#39;iters&#39;, &#39;page_server&#39;, &#39;sibling&#39;, &#39;stop&#39;, &#39;empty_ns&#39;,</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                                </span>&#39;fault&#39;, &#39;keep_img&#39;, &#39;report&#39;, &#39;snaps&#39;, &#39;sat&#39;, &#39;script&#39;, &#39;rpc&#39;,</div><div>-<span class="gmail-Apple-tab-span" style="white-space:pre">                                </span>&#39;join_ns&#39;, &#39;dedup&#39;, &#39;sbs&#39;, &#39;freezecg&#39;, &#39;user&#39;, &#39;dry_run&#39;, &#39;noauto_dedup&#39;)</div><div>+<span class="gmail-Apple-tab-span" style="white-space:pre">                                </span>&#39;join_ns&#39;, &#39;dedup&#39;, &#39;sbs&#39;, &#39;freezecg&#39;, &#39;user&#39;, &#39;dry_run&#39;, &#39;noauto_dedup&#39;, &#39;remote&#39;)</div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>arg = repr((name, desc, flavor, {d: self.__opts[d] for d in nd}))</div><div> </div><div> <span class="gmail-Apple-tab-span" style="white-space:pre">                </span>if self.__use_log:</div><div>@@ -1834,6 +1861,7 @@ rp.add_argument(&quot;--user&quot;, help = &quot;Run CRIU as regular user&quot;, action = &#39;store_tru</div><div> rp.add_argument(&quot;--rpc&quot;, help = &quot;Run CRIU via RPC rather than CLI&quot;, action = &#39;store_true&#39;)</div><div> </div><div> rp.add_argument(&quot;--page-server&quot;, help = &quot;Use page server dump&quot;, action = &#39;store_true&#39;)</div><div>+rp.add_argument(&quot;--remote&quot;, help = &quot;Use remote option for diskless C/R&quot;, action = &#39;store_true&#39;)</div><div> rp.add_argument(&quot;-p&quot;, &quot;--parallel&quot;, help = &quot;Run test in parallel&quot;)</div><div> rp.add_argument(&quot;--dry-run&quot;, help=&quot;Don&#39;t run tests, just pretend to&quot;, action=&#39;store_true&#39;)</div><div> rp.add_argument(&quot;--script&quot;, help=&quot;Add script to get notified by criu&quot;)</div></div><div><br></div></div>