mirror of
https://github.com/onyx-and-iris/vban-cmd-python.git
synced 2025-01-18 10:30:48 +00:00
add self.buff, runmany
add self.buff and test for equality against private packet before returning as public packet. add runmany
This commit is contained in:
parent
6432eae3b4
commit
416550fa95
@ -3,8 +3,9 @@ from time import sleep
|
||||
|
||||
def main():
|
||||
with vban_cmd.connect('potato', ip='ws.local') as vban:
|
||||
for i in range(8):
|
||||
print(vban.bus[i].levels.all)
|
||||
for i in range(100):
|
||||
print(vban.strip[5].A1)
|
||||
print(vban.strip[5].A2)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
114
tests/runmany.ps1
Normal file
114
tests/runmany.ps1
Normal file
@ -0,0 +1,114 @@
|
||||
param(
|
||||
[parameter(Mandatory=$false)]
|
||||
[Int] $num = 1,
|
||||
[switch]$cycle,
|
||||
[switch]$Log
|
||||
)
|
||||
|
||||
$global:failures = 0
|
||||
|
||||
Function RunTests {
|
||||
param([int]$cycle_num)
|
||||
if ($cycle_num) {
|
||||
$num = $cycle_num
|
||||
}
|
||||
|
||||
$logfile = "nosetest.log"
|
||||
$failures = $global:failures
|
||||
$firstrun = $false
|
||||
|
||||
if ($cycle_num -eq 20) { $firstrun = $true }
|
||||
|
||||
(Get-Content '__init__.py') | ForEach-Object {
|
||||
$m = [regex]::Match($_, '^(DELAY)\s=\s(\d.\d+)')
|
||||
if ($m.captures.groups.count -gt 1) {
|
||||
$delay = $m.captures.groups[2]
|
||||
}
|
||||
$m = [regex]::Match($_, '^(MAX_POLLS)\s=\s(\d+)')
|
||||
if ($m.captures.groups.count -gt 1) {
|
||||
$maxpolls = $m.captures.groups[2]
|
||||
}
|
||||
}
|
||||
|
||||
1..$num | ForEach-Object { `
|
||||
if ($Log) { "Running test $_ of ${num} runs" | Tee-Object -FilePath $logfile -Append }
|
||||
else { Write-Host "Running test $_ of ${num} runs" }
|
||||
|
||||
ForEach ($line in $(Invoke-Expression "nosetests --randomize -s tests 2>&1")) {
|
||||
if ($Log) {
|
||||
if ($line -NotMatch '^(System)') {
|
||||
"${line}" | Tee-Object -FilePath $logfile -Append
|
||||
}
|
||||
} else {
|
||||
if ($line -NotMatch '^(System)') { Write-Host "${line}" }
|
||||
}
|
||||
|
||||
$m = [regex]::Match($line, '^(FAILED)\s\([errors=\d+,\s]?failures=(\d+)\)')
|
||||
if ($m.captures.groups.count -gt 1) {
|
||||
$failures += $m.captures.groups[2].value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($Log) {
|
||||
$log_backup = LogRotate -logfile $logfile
|
||||
$log_backupfile = Split-Path $log_backup -leaf
|
||||
|
||||
$summary_file = "summary.log"
|
||||
if ($firstrun -eq $true) {
|
||||
"===========================================================`n" + `
|
||||
"NOTES:" | Tee-Object -FilePath $summary_file -Append
|
||||
}
|
||||
"===========================================================`n" + `
|
||||
"${num} test run with ${delay} delay and ${maxpolls} max_polls`n" + `
|
||||
"Total failures: ${failures}`n" + `
|
||||
"Logfile for this test run: ${log_backupfile}`n" + `
|
||||
"===========================================================" | `
|
||||
Tee-Object -FilePath $summary_file -Append
|
||||
} else {
|
||||
"===========================================================",
|
||||
"${num} test run with ${delay} delay and ${maxpolls} max_polls",
|
||||
"Total failures: ${failures}",
|
||||
"===========================================================" | Write-Host
|
||||
}
|
||||
$global:failures = $failures
|
||||
}
|
||||
|
||||
Function LogRotate {
|
||||
param([string]$logfile)
|
||||
Get-ChildItem ./ -recurse `
|
||||
| Where-Object {$_.basename -ne 'summary' -and $_.extension -eq ".log" } `
|
||||
| ForEach-Object {
|
||||
$i = 1
|
||||
$StopLoop = $false
|
||||
|
||||
do {
|
||||
try {
|
||||
$savefile = "$($_.Fullname)_$i.backup"
|
||||
Rename-Item -Path $_.FullName `
|
||||
-NewName $savefile -ErrorAction "Stop"
|
||||
|
||||
$StopLoop = $true
|
||||
}
|
||||
catch {
|
||||
Start-Sleep -m 100
|
||||
$i++
|
||||
}
|
||||
} until ($StopLoop -eq $true)
|
||||
}
|
||||
$savefile
|
||||
}
|
||||
|
||||
if ($MyInvocation.InvocationName -ne ".")
|
||||
{
|
||||
& '..\venv_vban_cmd\Scripts\activate.ps1'
|
||||
|
||||
if ($cycle) {
|
||||
@(20, 50, 100, 200, 500, 1000) | ForEach-Object {
|
||||
RunTests -cycle_num $_
|
||||
if ($global:failures -gt 0) { break }
|
||||
}
|
||||
} else { RunTests }
|
||||
|
||||
& 'deactivate'
|
||||
}
|
@ -62,7 +62,7 @@ class Channel(abc.ABC):
|
||||
|
||||
def getter(self):
|
||||
""" Returns an RT data packet. """
|
||||
return self._remote.get_rt()
|
||||
return self._remote.public_packet
|
||||
def setter(self, param, val):
|
||||
""" Sends a string request RT packet. """
|
||||
self._remote.set_rt(f'{self.identifier}', param, val)
|
||||
|
@ -35,6 +35,7 @@ class VbanCmd(abc.ABC):
|
||||
self._text_header = TextRequestHeader()
|
||||
self._register_rt_header = RegisterRTHeader()
|
||||
self.expected_packet = VBAN_VMRT_Packet_Header()
|
||||
self.buff = None
|
||||
|
||||
self._rt_register_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
self._rt_packet_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
@ -94,15 +95,21 @@ class VbanCmd(abc.ABC):
|
||||
)
|
||||
return False
|
||||
|
||||
@property
|
||||
def public_packet(self):
|
||||
self.buff = self.get_rt()
|
||||
return self.buff
|
||||
|
||||
def get_rt(self):
|
||||
def fget():
|
||||
data = False
|
||||
while not data:
|
||||
data = self._fetch_rt_packet()
|
||||
return data
|
||||
for i in range(self._max_polls):
|
||||
data = fget()
|
||||
return data
|
||||
private_packet = fget()
|
||||
if private_packet.__eq__(self.buff):
|
||||
private_packet = fget()
|
||||
return private_packet
|
||||
|
||||
def set_rt(self, id_, param, val):
|
||||
cmd = f'{id_}.{param}={val}'
|
||||
@ -137,10 +144,14 @@ class VbanCmd(abc.ABC):
|
||||
""" Restarts Voicemeeter's audio engine. """
|
||||
self.set_rt('Command', 'Restart', 1)
|
||||
|
||||
def __exit__(self, exc_type, exc_value, exc_traceback):
|
||||
def close(self):
|
||||
sleep(self._delay)
|
||||
self._rt_packet_socket.close()
|
||||
sys.exit()
|
||||
|
||||
def __exit__(self, exc_type, exc_value, exc_traceback):
|
||||
self.close()
|
||||
|
||||
|
||||
def _make_remote(kind: NamedTuple) -> VbanCmd:
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user