Vagrantfile 7.1 KB
Newer Older
1 2 3 4 5 6
Vagrant.configure("2") do |config|
    config.vm.provider "virtualbox" do |v|
        v.memory = 1024
        v.cpus = 1
    end

L
Laurent Arnoud 已提交
7
    config.vm.box = "debian/jessie64"
8 9 10 11
    config.vm.hostname = "exa"

    # Install the dependencies needed for exa to build.
    config.vm.provision :shell, privileged: true, inline:
12
        %[apt-get install -y git cmake libgit2-dev libssh2-1-dev curl attr pkg-config]
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

    # Guarantee that the timezone is UTC -- some of the tests
    # depend on this (for now).
    config.vm.provision :shell, privileged: true, inline:
        %[timedatectl set-timezone UTC]

    # Install Rust.
    # This is done as vagrant, not root, because it’s vagrant
    # who actually uses it. Sent to /dev/null because the progress
    # bar produces a lot of output.
    config.vm.provision :shell, privileged: false, inline:
        %[hash rustc &>/dev/null || curl -sSf https://static.rust-lang.org/rustup.sh | sh &> /dev/null]

    # Use a different ‘target’ directory on the VM than on the host.
    # By default it just uses the one in /vagrant/target, which can
    # cause problems if it has different permissions than the other
    # directories, or contains object files compiled for the host.
    config.vm.provision :shell, privileged: false, inline:
        %[echo "export CARGO_TARGET_DIR=/home/vagrant/target" >> ~/.bashrc]

    # Test that wide columns work with a really long username.
    # The benefit of Vagrant is that we don’t need to set this up
    # on the *actual* system!
    longuser = "antidisestablishmentarienism"
    config.vm.provision :shell, privileged: true, inline:
        %[id -u #{longuser} &>/dev/null || useradd #{longuser}]

    test_dir = "/home/vagrant/testcases"
    invalid_uid = 666
    invalid_gid = 616
    some_date = "201601011234.56"  # 1st January 2016, 12:34:56

    # Delete old testcases if they exist already.
    # This needs root because the generator does some sudo-ing.
    config.vm.provision :shell, privileged: true, inline:
        %[rm -rfv #{test_dir}]

    # Generate our awkward testcases.
    config.vm.provision :shell, privileged: false, inline:
        %[mkdir #{test_dir}]

    # Awkward file size testcases.
    config.vm.provision :shell, privileged: false, inline: <<-EOF
        set -xe
        mkdir "#{test_dir}/files"
        for i in {1..13}; do
            fallocate -l "$i" "#{test_dir}/files/$i"_bytes
            fallocate -l "$i"KiB "#{test_dir}/files/$i"_KiB
            fallocate -l "$i"MiB "#{test_dir}/files/$i"_MiB
        done
        touch -t #{some_date} "#{test_dir}/files/"*
    EOF

B
Ben S 已提交
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
    # File name extension testcases.
    config.vm.provision :shell, privileged: false, inline: <<-EOF
        set -xe
        mkdir "#{test_dir}/file-types"

        touch "#{test_dir}/file-types/Makefile"

        touch "#{test_dir}/file-types/image.png"
        touch "#{test_dir}/file-types/image.svg"

        touch "#{test_dir}/file-types/video.avi"
        touch "#{test_dir}/file-types/video.wmv"

        touch "#{test_dir}/file-types/music.mp3"
        touch "#{test_dir}/file-types/music.ogg"

        touch "#{test_dir}/file-types/lossless.flac"
        touch "#{test_dir}/file-types/lossless.wav"

        touch "#{test_dir}/file-types/crypto.asc"
        touch "#{test_dir}/file-types/crypto.signature"

        touch "#{test_dir}/file-types/document.pdf"
        touch "#{test_dir}/file-types/document.xlsx"

        touch "#{test_dir}/file-types/compressed.zip"
        touch "#{test_dir}/file-types/compressed.tar.gz"
B
Ben S 已提交
93
        touch "#{test_dir}/file-types/compressed.tgz"
B
Ben S 已提交
94 95 96 97 98 99 100 101 102 103 104 105

        touch "#{test_dir}/file-types/backup~"
        touch "#{test_dir}/file-types/#SAVEFILE#"
        touch "#{test_dir}/file-types/file.tmp"

        touch "#{test_dir}/file-types/compiled.class"
        touch "#{test_dir}/file-types/compiled.o"
        touch "#{test_dir}/file-types/compiled.js"
        touch "#{test_dir}/file-types/compiled.coffee"

    EOF

106 107 108 109 110 111 112
    # Awkward symlink testcases.
    config.vm.provision :shell, privileged: false, inline: <<-EOF
        set -xe
        mkdir "#{test_dir}/links"
        ln -s / "#{test_dir}/links/root"
        ln -s /usr "#{test_dir}/links/usr"
        ln -s nowhere "#{test_dir}/links/broken"
B
Ben S 已提交
113
        ln -s /proc/1/root "#{test_dir}/links/forbidden"
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 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
    EOF

    # Awkward passwd testcases.
    # sudo is needed for these because we technically aren’t a member
    # of the groups (because they don’t exist), and chown and chgrp
    # are smart enough to disallow it!
    config.vm.provision :shell, privileged: false, inline: <<-EOF
        set -xe
        mkdir "#{test_dir}/passwd"

        touch -t #{some_date} "#{test_dir}/passwd/unknown-uid"
        sudo chown #{invalid_uid} "#{test_dir}/passwd/unknown-uid"

        touch -t #{some_date} "#{test_dir}/passwd/unknown-gid"
        sudo chgrp #{invalid_gid} "#{test_dir}/passwd/unknown-gid"
    EOF

    # Awkward permission testcases.
    config.vm.provision :shell, privileged: false, inline: <<-EOF
        set -xe
        mkdir "#{test_dir}/permissions"

        touch "#{test_dir}/permissions/all-permissions"
        chmod 777 "#{test_dir}/permissions/all-permissions"

        touch "#{test_dir}/permissions/no-permissions"
        chmod 000 "#{test_dir}/permissions/no-permissions"

        mkdir "#{test_dir}/permissions/forbidden-directory"
        chmod 000 "#{test_dir}/permissions/forbidden-directory"

        touch -t #{some_date} "#{test_dir}/permissions/"*
    EOF


    # Awkward extended attribute testcases.
    config.vm.provision :shell, privileged: false, inline: <<-EOF
        set -xe
        mkdir "#{test_dir}/attributes"

        touch "#{test_dir}/attributes/none"

        touch "#{test_dir}/attributes/one"
        setfattr -n user.greeting -v hello "#{test_dir}/attributes/one"

        touch "#{test_dir}/attributes/two"
        setfattr -n user.greeting -v hello "#{test_dir}/attributes/two"
        setfattr -n user.another_greeting -v hi "#{test_dir}/attributes/two"

        #touch "#{test_dir}/attributes/forbidden"
        #setfattr -n user.greeting -v hello "#{test_dir}/attributes/forbidden"
        #chmod +a "$YOU deny readextattr" "#{test_dir}/attributes/forbidden"

        mkdir "#{test_dir}/attributes/dirs"

        mkdir "#{test_dir}/attributes/dirs/empty-with-attribute"
        setfattr -n user.greeting -v hello "#{test_dir}/attributes/dirs/empty-with-attribute"

        mkdir "#{test_dir}/attributes/dirs/full-with-attribute"
        touch "#{test_dir}/attributes/dirs/full-with-attribute/file"
        setfattr -n user.greeting -v hello "#{test_dir}/attributes/dirs/full-with-attribute"

        mkdir "#{test_dir}/attributes/dirs/full-but-forbidden"
        touch "#{test_dir}/attributes/dirs/full-but-forbidden/file"
        #setfattr -n user.greeting -v hello "#{test_dir}/attributes/dirs/full-but-forbidden"
        #chmod 000 "#{test_dir}/attributes/dirs/full-but-forbidden"
        #chmod +a "$YOU deny readextattr" "#{test_dir}/attributes/dirs/full-but-forbidden"

		touch -t #{some_date} "#{test_dir}/attributes"
        touch -t #{some_date} "#{test_dir}/attributes/"*
        touch -t #{some_date} "#{test_dir}/attributes/dirs/"*
        touch -t #{some_date} "#{test_dir}/attributes/dirs/"*/*
    EOF
end