Compare commits

..

3 commits

Author SHA1 Message Date
57180e3596
jw.pkg.lib.Uri: Add unit test
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 4m9s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 4m5s
CI / Packaging test (pull_request) Successful in 0s

The Uri class provides URL parsing and manipulation utilities used throughout jw-pkg. Add a unit test covering URL parsing, credential handling, path manipulation, and safe string formatting.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-06-25 18:12:45 +02:00
8c093733f4
test/ .. /help: Fail over missing toplevel "make all"

The help integration test currently only succeeds because CI doesn't run "make all" before "make test". That way, the checked out repository lacks the generated __init__.py files needed for some modular subcommands to be fully loaded, and hence, the test should have failed. The entire machinery only worked because the subcommands in question are not not essential to building jw-pkg itself: "secrets" and "posix"

The fix is to

1. Change CI to run "make all" before "make test" (not here) 2. Fix the test in jw-pkg

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-06-25 18:12:45 +02:00
e739b8f0b8
python-tools.sh: Next attempt to satisfy formatter
Some checks failed
CI / Packaging - Kali Linux (pull_request) Failing after 3m41s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Failing after 3m59s
CI / Packaging test (pull_request) Failing after 0s

Commit 55060486 does not satisfy yapf in all places of the source code, so have another attempt at it.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-06-25 18:12:41 +02:00
6 changed files with 109 additions and 0 deletions

View file

@ -1,4 +1,6 @@
TOPDIR = ..
ORDERED_SUBDIRS = unit integration
include $(TOPDIR)/make/proj.mk
include $(JWBDIR)/make/dirs.mk

4
test/unit/Makefile Normal file
View file

@ -0,0 +1,4 @@
TOPDIR = ../..
include $(TOPDIR)/make/proj.mk
include $(JWBDIR)/make/dirs.mk

View file

@ -0,0 +1,4 @@
TOPDIR = ../../..
include $(TOPDIR)/make/proj.mk
include $(JWBDIR)/make/dirs.mk

View file

@ -0,0 +1,4 @@
TOPDIR = ../../../..
include $(TOPDIR)/make/proj.mk
include $(JWBDIR)/make/dirs.mk

View file

@ -0,0 +1,7 @@
TOPDIR = ../../../../../
include $(TOPDIR)/make/proj.mk
include $(JWBDIR)/make/py-run.mk
all:
test: run

View file

@ -0,0 +1,88 @@
import sys, os
# Mirror the source tree structure so imports resolve correctly
src_root = os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', 'src', 'python')
sys.path.insert(0, src_root)
from jw.pkg.lib.Uri import Uri
# Basic URL parsing
u = Uri('ssh://john.doe@host:22/path/to/repo')
assert u.protocol == 'ssh'
assert u.hostname == 'host'
assert u.port == 22
assert u.path == '/path/to/repo'
# Username and password
u = Uri('https://user:pass@example.com/repo')
assert u.username == 'user'
assert u.password == 'pass'
# Credentials in output
u = Uri('https://user:secret@example.com/repo')
assert 'secret' in u.full # full shows password
assert '<hidden>' in u.safe_full_with_username # safe version hides password
# Scheme defaults to file
u = Uri('/local/path')
assert u.scheme == 'file://'
assert u.protocol == 'file'
# Pimp returns existing Uri unchanged
u1 = Uri('ssh://host/path')
u2 = Uri.pimp(u1)
assert u2 is u1
# New with path (add)
u = Uri('ssh://host/path')
u2 = u.new_add_path('subdir')
assert u2.to_string == 'ssh://host/path/subdir'
# New with path (replace) - to_string is updated
u3 = u.new_replace_path('/other')
assert u3.to_string == 'ssh://host/other'
# Authority includes credentials
u = Uri('ssh://user:pass@host:22/path')
assert u.authority == 'userpass@host:22'
# Origin excludes credentials
assert u.origin == 'host:22'
# ID and safe version hide password
assert u.id == 'ssh://user:<hidden>@host:22'
assert '<hidden>' in u.safe_full_with_username
# Full includes path and credentials
assert u.full == 'ssh://userpass@host:22/path'
# Simple URLs
u = Uri('https://example.com/repo.git')
assert u.hostname == 'example.com'
assert u.path == '/repo.git'
assert u.basename == 'repo.git'
# Username setter
u = Uri('ssh://host/path')
u.set_username('newuser')
assert u.username == 'newuser'
# Password setter
u = Uri('ssh://host/path')
u.set_password('newpass')
assert u.password == 'newpass'
# No port
u = Uri('ssh://host/path')
assert u.port is None
assert u.port_str is None
# to_string returns original
u = Uri('ssh://user:pass@host:22/path')
assert u.to_string == 'ssh://user:pass@host:22/path'
# String representation hides credentials
u = Uri('https://user:secret@example.com/repo.git')
assert '<hidden>' in str(u)
print('All Uri tests passed')