17995: Fix merge error.
[arvados.git] / services / fuse / tests / test_exec.py
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 from __future__ import absolute_import
6 from six import assertRegex
7 import arvados_fuse.command
8 import json
9 import multiprocessing
10 import os
11 from . import run_test_server
12 import tempfile
13 import unittest
14
15 from .integration_test import workerPool
16
17 try:
18     from shlex import quote
19 except:
20     from pipes import quote
21
22 def try_exec(mnt, cmd):
23     try:
24         arvados_fuse.command.Mount(
25             arvados_fuse.command.ArgumentParser().parse_args([
26                 '--read-write',
27                 '--mount-tmp=zzz',
28                 '--unmount-timeout=0.1',
29                 mnt,
30                 '--exec'] + cmd)).run()
31     except SystemExit:
32         pass
33     else:
34         raise AssertionError('should have exited')
35
36
37 class ExecMode(unittest.TestCase):
38     @classmethod
39     def setUpClass(cls):
40         run_test_server.run()
41         run_test_server.run_keep(blob_signing=True, num_servers=2)
42         run_test_server.authorize_with('active')
43
44     @classmethod
45     def tearDownClass(cls):
46         run_test_server.stop_keep(num_servers=2)
47
48     def setUp(self):
49         self.mnt = tempfile.mkdtemp()
50         _, self.okfile = tempfile.mkstemp()
51
52     def tearDown(self):
53         os.rmdir(self.mnt)
54         os.unlink(self.okfile)
55
56     def test_exec(self):
57         workerPool().apply(try_exec, (self.mnt, [
58             'sh', '-c',
59             'echo -n foo >{}; cp {} {}'.format(
60                 quote(os.path.join(self.mnt, 'zzz', 'foo.txt')),
61                 quote(os.path.join(self.mnt, 'zzz', '.arvados#collection')),
62                 quote(os.path.join(self.okfile)))]))
63         with open(self.okfile) as f:
64             assertRegex(
65                 self,
66                 json.load(f)['manifest_text'],
67                 r' 0:3:foo.txt\n')