|
| 1 | +#!/bin/bash |
| 2 | +set -e |
| 3 | + |
| 4 | +# Creates a RAM disk big enough to hold two copies of the test directory |
| 5 | +# structure. |
| 6 | +cat << EOF > "${TMP}/ramdisk.py" |
| 7 | +class RAMBlockDev: |
| 8 | + def __init__(self, block_size, num_blocks): |
| 9 | + self.block_size = block_size |
| 10 | + self.data = bytearray(block_size * num_blocks) |
| 11 | +
|
| 12 | + def readblocks(self, block_num, buf): |
| 13 | + for i in range(len(buf)): |
| 14 | + buf[i] = self.data[block_num * self.block_size + i] |
| 15 | +
|
| 16 | + def writeblocks(self, block_num, buf): |
| 17 | + for i in range(len(buf)): |
| 18 | + self.data[block_num * self.block_size + i] = buf[i] |
| 19 | +
|
| 20 | + def ioctl(self, op, arg): |
| 21 | + if op == 4: # get number of blocks |
| 22 | + return len(self.data) // self.block_size |
| 23 | + if op == 5: # get block size |
| 24 | + return self.block_size |
| 25 | +
|
| 26 | +import os |
| 27 | +
|
| 28 | +bdev = RAMBlockDev(512, 50) |
| 29 | +os.VfsFat.mkfs(bdev) |
| 30 | +os.mount(bdev, '/ramdisk') |
| 31 | +os.chdir('/ramdisk') |
| 32 | +EOF |
| 33 | + |
| 34 | + |
| 35 | +echo ----- |
| 36 | +$MPREMOTE run "${TMP}/ramdisk.py" |
| 37 | +$MPREMOTE resume ls |
| 38 | + |
| 39 | +echo ----- |
| 40 | +$MPREMOTE resume touch a.py |
| 41 | +$MPREMOTE resume touch :b.py |
| 42 | +$MPREMOTE resume ls : |
| 43 | +$MPREMOTE resume cat a.py |
| 44 | +$MPREMOTE resume cat :b.py |
| 45 | +$MPREMOTE resume sha256sum a.py |
| 46 | +echo -n "" | sha256sum |
| 47 | + |
| 48 | +echo ----- |
| 49 | +cat << EOF > "${TMP}/a.py" |
| 50 | +print("Hello") |
| 51 | +print("World") |
| 52 | +EOF |
| 53 | +$MPREMOTE resume cp "${TMP}/a.py" : |
| 54 | +$MPREMOTE resume cp "${TMP}/a.py" :b.py |
| 55 | +$MPREMOTE resume cp "${TMP}/a.py" :c.py |
| 56 | +$MPREMOTE resume cp :a.py :d.py |
| 57 | +$MPREMOTE resume ls |
| 58 | +$MPREMOTE resume exec "import a; import b; import c" |
| 59 | +$MPREMOTE resume sha256sum a.py |
| 60 | +cat "${TMP}/a.py" | sha256sum |
| 61 | + |
| 62 | +echo ----- |
| 63 | +$MPREMOTE resume mkdir aaa |
| 64 | +$MPREMOTE resume mkdir :bbb |
| 65 | +$MPREMOTE resume cp "${TMP}/a.py" :aaa |
| 66 | +$MPREMOTE resume cp "${TMP}/a.py" :bbb/b.py |
| 67 | +$MPREMOTE resume cat :aaa/a.py bbb/b.py |
| 68 | + |
| 69 | +echo ----- |
| 70 | +$MPREMOTE resume rm :b.py c.py |
| 71 | +$MPREMOTE resume ls |
| 72 | +$MPREMOTE resume rm :aaa/a.py bbb/b.py |
| 73 | +$MPREMOTE resume rmdir aaa :bbb |
| 74 | +$MPREMOTE resume ls |
| 75 | + |
| 76 | +echo ----- |
| 77 | +env EDITOR="sed -i s/Hello/Goodbye/" $MPREMOTE resume edit d.py |
| 78 | +$MPREMOTE resume sha256sum :d.py |
| 79 | +$MPREMOTE resume exec "import d" |
| 80 | + |
| 81 | + |
| 82 | +# Create a local directory structure and copy it to `:` on the device. |
| 83 | +echo ----- |
| 84 | +mkdir -p "${TMP}/package" |
| 85 | +mkdir -p "${TMP}/package/subpackage" |
| 86 | +cat << EOF > "${TMP}/package/__init__.py" |
| 87 | +from .x import x |
| 88 | +from .subpackage import y |
| 89 | +EOF |
| 90 | +cat << EOF > "${TMP}/package/x.py" |
| 91 | +def x(): |
| 92 | + print("x") |
| 93 | +EOF |
| 94 | +cat << EOF > "${TMP}/package/subpackage/__init__.py" |
| 95 | +from .y import y |
| 96 | +EOF |
| 97 | +cat << EOF > "${TMP}/package/subpackage/y.py" |
| 98 | +def y(): |
| 99 | + print("y") |
| 100 | +EOF |
| 101 | +$MPREMOTE run "${TMP}/ramdisk.py" |
| 102 | +$MPREMOTE resume cp -r "${TMP}/package" : |
| 103 | +$MPREMOTE resume ls : :package :package/subpackage |
| 104 | +$MPREMOTE resume exec "import package; package.x(); package.y()" |
| 105 | + |
| 106 | + |
| 107 | +# Same thing except with a destination directory name. |
| 108 | +echo ----- |
| 109 | +$MPREMOTE run "${TMP}/ramdisk.py" |
| 110 | +$MPREMOTE resume cp -r "${TMP}/package" :package2 |
| 111 | +$MPREMOTE resume ls : :package2 :package2/subpackage |
| 112 | +$MPREMOTE resume exec "import package2; package2.x(); package2.y()" |
| 113 | + |
| 114 | + |
| 115 | +# Copy to an existing directory, it will be copied inside. |
| 116 | +echo ----- |
| 117 | +$MPREMOTE run "${TMP}/ramdisk.py" |
| 118 | +$MPREMOTE resume mkdir :test |
| 119 | +$MPREMOTE resume cp -r "${TMP}/package" :test |
| 120 | +$MPREMOTE resume ls :test :test/package :test/package/subpackage |
| 121 | + |
| 122 | +# Copy to non-existing sub-directory. |
| 123 | +echo ----- |
| 124 | +$MPREMOTE resume cp -r "${TMP}/package" :test/package2 |
| 125 | +$MPREMOTE resume ls :test :test/package2 :test/package2/subpackage |
| 126 | + |
| 127 | +# Copy from the device back to local. |
| 128 | +echo ----- |
| 129 | +mkdir "${TMP}/copy" |
| 130 | +$MPREMOTE resume cp -r :test/package "${TMP}/copy" |
| 131 | +ls "${TMP}/copy" "${TMP}/copy/package" "${TMP}/copy/package/subpackage" |
| 132 | + |
| 133 | +# Copy from the device back to local with destination directory name. |
| 134 | +echo ----- |
| 135 | +$MPREMOTE resume cp -r :test/package "${TMP}/copy/package2" |
| 136 | +ls "${TMP}/copy" "${TMP}/copy/package2" "${TMP}/copy/package2/subpackage" |
| 137 | + |
| 138 | + |
| 139 | +# Copy from device to another location on the device with destination directory name. |
| 140 | +echo ----- |
| 141 | +$MPREMOTE run "${TMP}/ramdisk.py" |
| 142 | +$MPREMOTE resume cp -r "${TMP}/package" : |
| 143 | +$MPREMOTE resume cp -r :package :package3 |
| 144 | +$MPREMOTE resume ls : :package3 :package3/subpackage |
| 145 | + |
| 146 | +# Copy from device to another location on the device into an existing directory. |
| 147 | +echo ----- |
| 148 | +$MPREMOTE run "${TMP}/ramdisk.py" |
| 149 | +$MPREMOTE resume cp -r "${TMP}/package" : |
| 150 | +$MPREMOTE resume mkdir :package4 |
| 151 | +$MPREMOTE resume cp -r :package :package4 |
| 152 | +$MPREMOTE resume ls : :package4 :package4/package :package4/package/subpackage |
| 153 | + |
| 154 | +# Repeat an existing copy with one file modified. |
| 155 | +echo ----- |
| 156 | +cat << EOF > "${TMP}/package/subpackage/y.py" |
| 157 | +def y(): |
| 158 | + print("y2") |
| 159 | +EOF |
| 160 | +$MPREMOTE resume cp -r "${TMP}/package" : |
| 161 | +$MPREMOTE resume ls : :package :package/subpackage |
| 162 | +$MPREMOTE resume exec "import package; package.x(); package.y()" |
0 commit comments