File: test_ram.sh

package info (click to toggle)
liquidprompt 2.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,572 kB
  • sloc: sh: 3,621; python: 33; makefile: 15
file content (298 lines) | stat: -rw-r--r-- 10,208 bytes parent folder | download
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
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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298

# Error on unset variables
set -u

if [ -n "${ZSH_VERSION-}" ]; then
  SHUNIT_PARENT="$0"
  setopt shwordsplit ksh_arrays
fi

LP_ENABLE_RAM=1

typeset -a os outputs values_avail values_total values_remaining values_human

# Fake trivial Linux.
# Should be the first one, for test_ram_threshold below.
os+=('Linux')
outputs+=('MemTotal: 2048 kB
MemAvailable: 1024 kB')
values_avail+=('1048576')
values_total+=('2097152')
values_remaining+=('1024')
values_human+=('1024KiB')

# Another trivial, testing human display of MiB.
os+=('Linux')
outputs+=('MemTotal: 2097152 kB
MemAvailable: 1048576 kB') # 1024 * 1024
values_avail+=('1073741824')
values_total+=('2147483648')
values_remaining+=('1048576')
values_human+=('1024MiB')

# Another trivial, testing human display of GiB.
os+=('Linux')
outputs+=('MemTotal: 2147483648 kB
MemAvailable: 1073741824 kB') # 1024 * 1024 * 1024
values_avail+=('1099511627776')
values_total+=('2199023255552')
values_remaining+=('1073741824')
values_human+=('1024GiB')

# Linux 5.4.0-139-generic #156-Ubuntu SMP Fri Jan 20 17:27:18 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
os+=('Linux')
outputs+=('MemTotal:        8033668 kB
MemFree:         2722348 kB
MemAvailable:    6899116 kB
Buffers:         1360936 kB
Cached:          2226412 kB
SwapCached:            0 kB
Active:          2558628 kB
Inactive:        1491516 kB
Active(anon):     455688 kB
Inactive(anon):    46872 kB
Active(file):    2102940 kB
Inactive(file):  1444644 kB
Unevictable:        4504 kB
Mlocked:              32 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:               336 kB
Writeback:             0 kB
AnonPages:        467004 kB
Mapped:           451292 kB
Shmem:             53164 kB
KReclaimable:     939992 kB
Slab:            1126700 kB
SReclaimable:     939992 kB
SUnreclaim:       186708 kB
KernelStack:        5796 kB
PageTables:         8952 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6113980 kB
Committed_AS:    2605400 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       71264 kB
VmallocChunk:          0 kB
Percpu:             4464 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      564428 kB
DirectMap2M:     7710720 kB
DirectMap1G:     1048576 kB
'
)
values_avail+=('7064694784')
values_total+=('8226476032')
values_remaining+=('6899116')
values_human+=('6GiB')


# (Free?)BSD, unknown version
os+=('FreeBSD')
outputs+=('usable memory = 34346901504 (32755 MB)
avail memory  = 33139134464 (31603 MB)')
values_avail+=('33139134464')
values_total+=('34346901504')
values_remaining+=('32362436')
values_human+=('30GiB')

# FreeBSD 13.2-RELEASE-p1 GENERIC amd64
os+=('FreeBSD')
outputs+=('Hypervisor: Origin = "KVMKVMKVM"
real memory  = 8589934592 (8192 MB)
avail memory = 8270389248 (7887 MB)
Event timer "LAPIC" quality 600
ACPI APIC Table: <BOCHS  BXPCAPIC>')
values_avail+=('8270389248')
values_total+=('8589934592')
values_remaining+=('8076552')
values_human+=('7GiB')

# Darwin 22.3.0 Darwin Kernel Version 22.3.0: Mon Jan 30 20:42:11 PST 2023; root:xnu-8792.81.3~2/RELEASE_X86_64 x86_64
os+=('Darwin')
outputs+=('Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                               77936.
Pages active:                           1729321.
Pages inactive:                         1684334.
Pages speculative:                        45972.
Pages throttled:                              0.
Pages wired down:                        620324.
Pages purgeable:                          18622.
"Translation faults":                 134215056.
Pages copy-on-write:                    2741383.
Pages zero filled:                     97842470.
Pages reactivated:                       658037.
Pages purged:                            470473.
File-backed pages:                       786795.
Anonymous pages:                        2672832.
Pages stored in compressor:              105679.
Pages occupied by compressor:             35785.
Decompressions:                          256471.
Compressions:                            447621.
Pageins:                                4513634.
Pageouts:                                 11829.
Swapins:                                   6144.
Swapouts:                                  6656.
')
# (free + inactive) * page_size
# (77936+ 1684334 ) * 4096
values_avail+=('7218257920')
# (free + active + inactive + speculative + throttled + wired down + occupied by compressor) * page_size
# (77936+ 1729321+ 1684334  + 45972       + 0         + 620324     + 35785                 ) * 4096
values_total+=('17177280512')
values_remaining+=('7049080')
values_human+=('6GiB')

# Darwin 22.6.0 Darwin Kernel Version 22.6.0: Wed Jul  5 22:22:05 PDT 2023; root:xnu-8796.141.3~6/RELEASE_ARM64_T6000 arm64
os+=('Darwin')
outputs+=('Mach Virtual Memory Statistics: (page size of 16384 bytes)
Pages free:                             1415073.
Pages active:                           1261473.
Pages inactive:                          940337.
Pages speculative:                       324830.
Pages throttled:                              0.
Pages wired down:                        197899.
Pages purgeable:                          96625.
"Translation faults":                 513307041.
Pages copy-on-write:                   29469303.
Pages zero filled:                    207776720.
Pages reactivated:                       864998.
Pages purged:                           1374714.
File-backed pages:                      1140390.
Anonymous pages:                        1386250.
Pages stored in compressor:                   0.
Pages occupied by compressor:                 0.
Decompressions:                               0.
Compressions:                                 0.
Pageins:                                2250761.
Pageouts:                                     0.
Swapins:                                      0.
Swapouts:                                     0.
')
values_avail+=('38591037440')
values_total+=('67823403008')
values_remaining+=('37686560')
values_human+=('35GiB')

function test_ram() {
    _LP_LINUX_RAM_FILE="${SHUNIT_TMPDIR}/lpraminfo"
    _LP_BSD_RAM_FILE="${SHUNIT_TMPDIR}/lpraminfo"
    LP_RAM_THRESHOLD_PERC=100 # Available mem% will always lesser or equal than 100.
    LP_RAM_THRESHOLD=$(( (1<<63)-1 )) # MAXINT in 64 bits.
    LP_RAM_PRECISION=0
    typeset lp_ram_avail_bytes lp_ram_total_bytes lp_ram_used_bytes
    # Set to null because we don't use the `if _lp_ram` guard construction.
    typeset lp_ram_used_perc= lp_ram_perc=

    # Iterate over tests.
    for (( i=0; i < ${#values_avail[@]}; i++ )); do
        # Load correct version for OS.
        uname() { printf "${os[$i]}"; }
        . ../liquidprompt --no-activate
        unset -f uname

        # Linux and BSD.
        printf '%s\n' "${outputs[$i]}" > "${SHUNIT_TMPDIR}/lpraminfo"
        # Darwin.
        vm_stat() {
            printf '%s\n' "${outputs[$i]}"
        }
        __lp_ram_bytes
        assertEquals " #$i ${LP_OS} available memory." "${values_avail[$i]}" "${lp_ram_avail_bytes}"
        assertEquals " #$i ${LP_OS} total memory." "${values_total[$i]}" "${lp_ram_total_bytes}"
        assertEquals " #$i ${LP_OS} used memory." "$((lp_ram_total_bytes-lp_ram_avail_bytes))" "${lp_ram_used_bytes}"

        _lp_ram
        assertEquals " #$i ${LP_OS} untouched available memory." "${values_avail[$i]}" "${lp_ram_avail_bytes}"
        assertEquals " #$i ${LP_OS} untouched total memory." "${values_total[$i]}" "${lp_ram_total_bytes}"
        assertEquals " #$i ${LP_OS} untouched used memory." "$((lp_ram_total_bytes-lp_ram_avail_bytes))" "${lp_ram_used_bytes}"
        assertEquals " #$i ${LP_OS} available percentage." "$((lp_ram_avail_bytes*100/lp_ram_total_bytes))" "${lp_ram_perc}"
        assertEquals " #$i ${LP_OS} remaining." "${values_remaining[$i]}" "${lp_ram}"
        assertEquals " #$i ${LP_OS} human." "${values_human[$i]}" "${lp_ram_human}${lp_ram_human_units}"
    done
    unset -f vm_stat
}


function test_ram_threshold()
{
    _LP_LINUX_RAM_FILE="${SHUNIT_TMPDIR}/lpraminfo"
    LP_MARK_RAM="M"
    LP_RAM_PRECISION=0
    typeset lp_ram_perc=

    # 0 = no error, 1 = error.
    local OK=0 NO=1
    local MAXINT=$(( (1<<63)-1 )) # MAXINT in 64 bits.

    # Load Linux version.
    uname() { printf 'Linux'; }
    . ../liquidprompt --no-activate
    unset -f uname

    LP_RAM_THRESHOLD=0

    # Fake trivial meminfo = 1024/2048 kB.
    printf '%s\n' "${outputs[0]}" > "$_LP_LINUX_RAM_FILE"
    LP_RAM_THRESHOLD_PERC=100
    _lp_ram
    assertEquals "Tests expect fake trivial meminfo" "50" "$lp_ram_perc"

    LP_RAM_THRESHOLD_PERC=0
    _lp_ram
    assertEquals "No display at $lp_ram_perc <= $LP_RAM_THRESHOLD_PERC" "$NO" "$?"

    LP_RAM_THRESHOLD_PERC=100
    _lp_ram
    assertEquals "Display at $lp_ram_perc <= $LP_RAM_THRESHOLD_PERC" "$OK" "$?"

    LP_RAM_THRESHOLD_PERC=50
    _lp_ram
    assertEquals "Display at $lp_ram_perc <= $LP_RAM_THRESHOLD_PERC" "$OK" "$?"

    LP_RAM_THRESHOLD_PERC=51
    _lp_ram
    assertEquals "Display at $lp_ram_perc <= $LP_RAM_THRESHOLD_PERC" "$OK" "$?"

    LP_RAM_THRESHOLD_PERC=49
    _lp_ram
    assertEquals "No display at $lp_ram_perc <= $LP_RAM_THRESHOLD_PERC" "$NO" "$?"

    # At least one or both thresholds.
    LP_RAM_THRESHOLD_PERC=100
    LP_RAM_THRESHOLD=0
    _lp_ram
    assertEquals "Display at $lp_ram_perc <= $LP_RAM_THRESHOLD_PERC" "$OK" "$?"

    LP_RAM_THRESHOLD_PERC=0
    LP_RAM_THRESHOLD=$MAXINT
    _lp_ram
    assertEquals "Display at $lp_ram_perc <= $LP_RAM_THRESHOLD_PERC" "$OK" "$?"

    LP_RAM_THRESHOLD_PERC=100
    LP_RAM_THRESHOLD=$MAXINT
    _lp_ram
    assertEquals "Display at $lp_ram_perc <= $LP_RAM_THRESHOLD_PERC" "$OK" "$?"

    LP_RAM_THRESHOLD_PERC=0
    LP_RAM_THRESHOLD=0
    _lp_ram
    assertEquals "No display at $lp_ram_perc <= $LP_RAM_THRESHOLD_PERC" "$NO" "$?"
}

. ./shunit2