pdf 2026-05-12T14:35:02.918044642Z โ”‚ INFO[0024] ARG GITHUB_TOKEN_BUILD pdf 2026-05-12T14:35:02.918047888Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:35:02.918049795Z โ”‚ INFO[0024] ARG timezone=Asia/Bangkok pdf 2026-05-12T14:35:02.918056093Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:35:02.918058002Z โ”‚ INFO[0024] ENV GITHUB_USER $GITHUB_USER_BUILD pdf 2026-05-12T14:35:02.918060072Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:35:02.918061815Z โ”‚ INFO[0024] ENV GITHUB_TOKEN $GITHUB_TOKEN_BUILD pdf 2026-05-12T14:35:02.918063520Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:35:02.918065932Z โ”‚ INFO[0024] ENV TZ $timezone pdf 2026-05-12T14:35:02.918067705Z โ”‚ INFO[0024] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:35:02.918308027Z โ”‚ INFO[0024] WORKDIR /app pdf 2026-05-12T14:35:02.918310256Z โ”‚ INFO[0024] Cmd: workdir pdf 2026-05-12T14:35:02.918312045Z โ”‚ INFO[0024] Changed working directory to /app pdf 2026-05-12T14:35:02.918313841Z โ”‚ INFO[0024] Creating directory /app with uid -1 and gid -1 pdf 2026-05-12T14:35:02.918315683Z โ”‚ INFO[0024] Taking snapshot of files... pdf 2026-05-12T14:35:02.919970533Z โ”‚ INFO[0024] Resolving srcs [go.*]... pdf 2026-05-12T14:35:02.920631303Z โ”‚ INFO[0024] COPY go.* ./ pdf 2026-05-12T14:35:02.920634637Z โ”‚ INFO[0024] Resolving srcs [go.*]... pdf 2026-05-12T14:35:02.930248298Z โ”‚ INFO[0024] Taking snapshot of files... pdf 2026-05-12T14:35:02.931811892Z โ”‚ INFO[0024] RUN go mod download && go mod verify pdf 2026-05-12T14:35:02.931816122Z โ”‚ INFO[0024] Found cached layer, extracting to filesystem pdf 2026-05-12T14:35:47.574986495Z โ”‚ INFO[0069] COPY . . pdf 2026-05-12T14:35:47.767338345Z โ”‚ INFO[0069] Taking snapshot of files... pdf 2026-05-12T14:35:48.376055915Z โ”‚ INFO[0070] RUN go test -v ./... && CGO_ENABLED=0 go build -v -installsuffix 'static' -ldflags="-X 'main.version=$(git rev-parse --short HEAD)' -X 'main.build=$(date --iso-8601=seconds)'" -o dist/server ./cmd/server pdf 2026-05-12T14:35:48.778227392Z โ”‚ INFO[0070] Cmd: /bin/sh pdf 2026-05-12T14:35:48.778266065Z โ”‚ INFO[0070] Args: [-c go test -v ./... && CGO_ENABLED=0 go build -v -installsuffix 'static' -ldflags="-X 'main.version=$(git rev-parse --short HEAD)' -X 'main.build=$(date --iso-8601=seconds)'" -o dist/server ./cmd/server] pdf 2026-05-12T14:35:48.778284472Z โ”‚ INFO[0070] Running: [/bin/sh -c go test -v ./... && CGO_ENABLED=0 go build -v -installsuffix 'static' -ldflags="-X 'main.version=$(git rev-parse --short HEAD)' -X 'main.build=$(date --iso-8601=seconds)'" -o dist/server ./cmd/server] pdf 2026-05-12T14:35:56.112140456Z โ”‚ ? github.com/s0ngkran/pdf_watermark_process/cmd/make_blank [no test files] pdf 2026-05-12T14:36:04.093771020Z โ”‚ ? github.com/s0ngkran/pdf_watermark_process/cmd/sample_watermark [no test files] pdf 2026-05-12T14:36:04.471562126Z โ”‚ ? github.com/s0ngkran/pdf_watermark_process/cmd/server [no test files] pdf 2026-05-12T14:36:04.471592450Z โ”‚ ? github.com/s0ngkran/pdf_watermark_process/internal/assets/fonts [no test files] pdf 2026-05-12T14:36:04.498866204Z โ”‚ === RUN TestLoadConfig_Defaults pdf 2026-05-12T14:36:04.498909862Z โ”‚ === RUN TestLoadConfig_Defaults/App.Port pdf 2026-05-12T14:36:04.498913072Z โ”‚ === RUN TestLoadConfig_Defaults/Worker.CPURatio pdf 2026-05-12T14:36:04.498915823Z โ”‚ === RUN TestLoadConfig_Defaults/Worker.MinPagesForParallel pdf 2026-05-12T14:36:04.498918563Z โ”‚ === RUN TestLoadConfig_Defaults/Watermark.DefaultOpacity pdf 2026-05-12T14:36:04.498921080Z โ”‚ === RUN TestLoadConfig_Defaults/Watermark.DefaultFontSize pdf 2026-05-12T14:36:04.498923360Z โ”‚ === RUN TestLoadConfig_Defaults/Watermark.DefaultCopies pdf 2026-05-12T14:36:04.498926234Z โ”‚ === RUN TestLoadConfig_Defaults/Watermark.Rotation pdf 2026-05-12T14:36:04.498928526Z โ”‚ === RUN TestLoadConfig_Defaults/Watermark.Font pdf 2026-05-12T14:36:04.498930811Z โ”‚ === RUN TestLoadConfig_Defaults/Memory.Threshold pdf 2026-05-12T14:36:04.498933124Z โ”‚ === RUN TestLoadConfig_Defaults/Memory.MaxConcurrentJobs pdf 2026-05-12T14:36:04.498935419Z โ”‚ --- PASS: TestLoadConfig_Defaults (0.00s) pdf 2026-05-12T14:36:04.498937573Z โ”‚ --- PASS: TestLoadConfig_Defaults/App.Port (0.00s) pdf 2026-05-12T14:36:04.498939643Z โ”‚ --- PASS: TestLoadConfig_Defaults/Worker.CPURatio (0.00s) pdf 2026-05-12T14:36:04.498942155Z โ”‚ --- PASS: TestLoadConfig_Defaults/Worker.MinPagesForParallel (0.00s) pdf 2026-05-12T14:36:04.498944406Z โ”‚ --- PASS: TestLoadConfig_Defaults/Watermark.DefaultOpacity (0.00s) pdf 2026-05-12T14:36:04.498946601Z โ”‚ --- PASS: TestLoadConfig_Defaults/Watermark.DefaultFontSize (0.00s) pdf 2026-05-12T14:36:04.498948990Z โ”‚ --- PASS: TestLoadConfig_Defaults/Watermark.DefaultCopies (0.00s) pdf 2026-05-12T14:36:04.498951125Z โ”‚ --- PASS: TestLoadConfig_Defaults/Watermark.Rotation (0.00s) pdf 2026-05-12T14:36:04.498953277Z โ”‚ --- PASS: TestLoadConfig_Defaults/Watermark.Font (0.00s) pdf 2026-05-12T14:36:04.498955638Z โ”‚ --- PASS: TestLoadConfig_Defaults/Memory.Threshold (0.00s) pdf 2026-05-12T14:36:04.499046330Z โ”‚ --- PASS: TestLoadConfig_Defaults/Memory.MaxConcurrentJobs (0.00s) pdf 2026-05-12T14:36:04.499068325Z โ”‚ === RUN TestLoadConfig_EmptyName pdf 2026-05-12T14:36:04.499071848Z โ”‚ --- PASS: TestLoadConfig_EmptyName (0.00s) pdf 2026-05-12T14:36:04.499074875Z โ”‚ PASS pdf 2026-05-12T14:36:04.499077596Z โ”‚ ok github.com/s0ngkran/pdf_watermark_process/internal/config 0.025s pdf 2026-05-12T14:36:10.028950454Z โ”‚ === RUN TestMerge_CountExceedsMax pdf 2026-05-12T14:36:10.028978858Z โ”‚ 2026/05/12 21:36:04 [Merge] Request received from 0.0.0.0, Content-Length: 4320 pdf 2026-05-12T14:36:10.028981699Z โ”‚ --- PASS: TestMerge_CountExceedsMax (0.00s) pdf 2026-05-12T14:36:10.028983469Z โ”‚ === RUN TestMerge_CountAtMax pdf 2026-05-12T14:36:10.028996971Z โ”‚ 2026/05/12 21:36:04 [Merge] Request received from 0.0.0.0, Content-Length: 4122 pdf 2026-05-12T14:36:10.028998743Z โ”‚ 2026/05/12 21:36:04 [Merge] Merging 20 PDFs pdf 2026-05-12T14:36:10.029001092Z โ”‚ 2026/05/12 21:36:04 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_3708300568 pdf 2026-05-12T14:36:10.029007127Z โ”‚ 2026/05/12 21:36:04 [DEBUG] MergePDFs: starting, 20 PDFs to merge pdf 2026-05-12T14:36:10.029154229Z โ”‚ 2026/05/12 21:36:04 [ERROR] MergePDFs: failed to read PDF 0: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section pdf 2026-05-12T14:36:10.029179307Z โ”‚ 2026/05/12 21:36:04 [Merge] Failed to merge PDFs: failed to read PDF 0: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section pdf 2026-05-12T14:36:10.029182086Z โ”‚ --- PASS: TestMerge_CountAtMax (0.00s) pdf 2026-05-12T14:36:10.029183893Z โ”‚ === RUN TestMerge_TotalSizeExceedsMax pdf 2026-05-12T14:36:10.029186155Z โ”‚ 2026/05/12 21:36:09 [Merge] Request received from 0.0.0.0, Content-Length: 125829653 pdf 2026-05-12T14:36:10.029187951Z โ”‚ --- PASS: TestMerge_TotalSizeExceedsMax (4.11s) pdf 2026-05-12T14:36:10.029190116Z โ”‚ === RUN TestMerge_CountZero pdf 2026-05-12T14:36:10.029192488Z โ”‚ 2026/05/12 21:36:09 [Merge] Request received from 0.0.0.0, Content-Length: 181 pdf 2026-05-12T14:36:10.029202063Z โ”‚ --- PASS: TestMerge_CountZero (0.00s) pdf 2026-05-12T14:36:10.029203746Z โ”‚ === RUN TestMerge_CountOne_PassesValidator pdf 2026-05-12T14:36:10.029205573Z โ”‚ 2026/05/12 21:36:09 [Merge] Request received from 0.0.0.0, Content-Length: 377 pdf 2026-05-12T14:36:10.029207222Z โ”‚ 2026/05/12 21:36:09 [Merge] Merging 1 PDFs pdf 2026-05-12T14:36:10.029208988Z โ”‚ 2026/05/12 21:36:09 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_1255647466 pdf 2026-05-12T14:36:10.029397156Z โ”‚ 2026/05/12 21:36:09 [DEBUG] MergePDFs: starting, 1 PDFs to merge pdf 2026-05-12T14:36:10.029400467Z โ”‚ 2026/05/12 21:36:09 [DEBUG] MergePDFs: only 1 PDF, returning as-is pdf 2026-05-12T14:36:10.029402169Z โ”‚ 2026/05/12 21:36:09 [Merge] Success: merged 1 PDFs into 20 bytes pdf 2026-05-12T14:36:10.029403991Z โ”‚ --- PASS: TestMerge_CountOne_PassesValidator (0.00s) pdf 2026-05-12T14:36:10.029406110Z โ”‚ === RUN TestMerge_InvalidPDF pdf 2026-05-12T14:36:10.029408297Z โ”‚ 2026/05/12 21:36:09 [Merge] Request received from 0.0.0.0, Content-Length: 562 pdf 2026-05-12T14:36:10.029410560Z โ”‚ --- PASS: TestMerge_InvalidPDF (0.00s) pdf 2026-05-12T14:36:10.029412192Z โ”‚ === RUN TestTextStampV2_HappyPath_WithLastUpdated pdf 2026-05-12T14:36:10.029414550Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=51e3f42dd95c08a222f55ad12ee04936dc10b3d3073cc73037d606fb4c84, Content-Length: 7244 pdf 2026-05-12T14:36:10.029417282Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=6224 bytes pdf 2026-05-12T14:36:10.029423870Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Parameters: id=42, name=เธชเธกเธŠเธฒเธข เนƒเธˆเธ”เธต, name_en=Somchai Jaidee, citizen_id=1234567890123 pdf 2026-05-12T14:36:10.029425580Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Starting layered PDF processing... pdf 2026-05-12T14:36:10.029427280Z โ”‚ 2026/05/12 21:36:09 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.029428882Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Processing complete, output size: 77669 bytes pdf 2026-05-12T14:36:10.029431002Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=1 memory_pct_start=0.0 duration_ms=11 outcome=success error="" pdf 2026-05-12T14:36:10.029435775Z โ”‚ --- PASS: TestTextStampV2_HappyPath_WithLastUpdated (0.01s) pdf 2026-05-12T14:36:10.029437446Z โ”‚ === RUN TestTextStampV2_HappyPath_Multipart pdf 2026-05-12T14:36:10.029439179Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=1d5411fadeaaf394b475211325c3d52e0f38269aa74e4a6a2d07b3f95288, Content-Length: 6981 pdf 2026-05-12T14:36:10.029441048Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=6224 bytes pdf 2026-05-12T14:36:10.029442705Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Parameters: id=42, name=เธชเธกเธŠเธฒเธข เนƒเธˆเธ”เธต, name_en=Somchai Jaidee, citizen_id=1234567890123 pdf 2026-05-12T14:36:10.029444462Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Starting layered PDF processing... pdf 2026-05-12T14:36:10.029446107Z โ”‚ 2026/05/12 21:36:09 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.029447857Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Processing complete, output size: 70814 bytes pdf 2026-05-12T14:36:10.029449497Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=1 memory_pct_start=0.0 duration_ms=10 outcome=success error="" pdf 2026-05-12T14:36:10.029451298Z โ”‚ --- PASS: TestTextStampV2_HappyPath_Multipart (0.01s) pdf 2026-05-12T14:36:10.029452992Z โ”‚ === RUN TestTextStampV2_MissingPDF pdf 2026-05-12T14:36:10.029454749Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=4f7679360928402a17388333cc38c0c906af84b5c6053bc0af1e6d98df12, Content-Length: 292 pdf 2026-05-12T14:36:10.029456565Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="PDF file or pdf_url is required" pdf 2026-05-12T14:36:10.029458413Z โ”‚ --- PASS: TestTextStampV2_MissingPDF (0.00s) pdf 2026-05-12T14:36:10.029460295Z โ”‚ === RUN TestTextStampV2_MissingID_Allowed pdf 2026-05-12T14:36:10.029462022Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=2b31c5b090e4e3f1ac2d447e978e25ad2ab50f7d27783fad40a426eca596, Content-Length: 6579 pdf 2026-05-12T14:36:10.029463797Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=6224 bytes pdf 2026-05-12T14:36:10.029465400Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Parameters: id=, name=n, name_en=, citizen_id= pdf 2026-05-12T14:36:10.029467358Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Starting layered PDF processing... pdf 2026-05-12T14:36:10.029469143Z โ”‚ 2026/05/12 21:36:09 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.029470693Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Processing complete, output size: 65121 bytes pdf 2026-05-12T14:36:10.029472425Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=1 memory_pct_start=0.0 duration_ms=9 outcome=success error="" pdf 2026-05-12T14:36:10.029474082Z โ”‚ --- PASS: TestTextStampV2_MissingID_Allowed (0.01s) pdf 2026-05-12T14:36:10.029475803Z โ”‚ === RUN TestTextStampV2_MissingName pdf 2026-05-12T14:36:10.029481098Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=3143071bd409824427aa53690a7d30980c91697947d82c20e43f3972f1c6, Content-Length: 6577 pdf 2026-05-12T14:36:10.029482804Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=6224 bytes pdf 2026-05-12T14:36:10.029485178Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=1 memory_pct_start=0.0 duration_ms=0 outcome=error error="name required" pdf 2026-05-12T14:36:10.029486956Z โ”‚ --- PASS: TestTextStampV2_MissingName (0.00s) pdf 2026-05-12T14:36:10.029490832Z โ”‚ === RUN TestTextStampV2_SSRFURLBlocked pdf 2026-05-12T14:36:10.029492423Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=88dbf230ef9c67ffa0bfcc2d37befec7dd9c3874055a2a360117792f6be8, Content-Length: 426 pdf 2026-05-12T14:36:10.029493956Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] ERROR: Invalid PDF URL: url host resolves to a non-public address pdf 2026-05-12T14:36:10.029495647Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url=http://127.0.0.1/x pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="Invalid PDF URL: url host resolves to a non-public address" pdf 2026-05-12T14:36:10.029497293Z โ”‚ --- PASS: TestTextStampV2_SSRFURLBlocked (0.00s) pdf 2026-05-12T14:36:10.029498878Z โ”‚ === RUN TestTextStampV2_SSRFSchemeBlocked pdf 2026-05-12T14:36:10.029500498Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=a7817624dc9561a843875209af7936a5dff02e0af296807a0979ed661522, Content-Length: 426 pdf 2026-05-12T14:36:10.029502046Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] ERROR: Invalid PDF URL: only http(s) URLs are allowed pdf 2026-05-12T14:36:10.029504926Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url=file:///etc/passwd pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="Invalid PDF URL: only http(s) URLs are allowed" pdf 2026-05-12T14:36:10.029506642Z โ”‚ --- PASS: TestTextStampV2_SSRFSchemeBlocked (0.00s) pdf 2026-05-12T14:36:10.029508206Z โ”‚ === RUN TestTextStampV2_EmptyBody pdf 2026-05-12T14:36:10.029509846Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=x, Content-Length: 0 pdf 2026-05-12T14:36:10.029511621Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] ERROR: Failed to parse multipart form: form size must be greater than 0. Given 0 pdf 2026-05-12T14:36:10.029513293Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="Failed to parse multipart form: form size must be greater than 0. Given 0" pdf 2026-05-12T14:36:10.029514857Z โ”‚ --- PASS: TestTextStampV2_EmptyBody (0.00s) pdf 2026-05-12T14:36:10.029516415Z โ”‚ === RUN TestTextStampV2_ServiceErrorMapsTo500 pdf 2026-05-12T14:36:10.029518048Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=80191bc325ec29e241ef205d5b9c9f7cdb5fe357437cb505ce7d01d55aaa, Content-Length: 485 pdf 2026-05-12T14:36:10.029519600Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] PDF file received: name=sample.pdf, size=18 bytes pdf 2026-05-12T14:36:10.029521316Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Parameters: id=1, name=n, name_en=, citizen_id= pdf 2026-05-12T14:36:10.029523056Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Starting layered PDF processing... pdf 2026-05-12T14:36:10.029524791Z โ”‚ 2026/05/12 21:36:09 [LayeredStamp] OCG hide failed (passthrough): ocg: read context: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section pdf 2026-05-12T14:36:10.029526640Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] ERROR: Failed to process PDF: layered stamp: page dims: dims: read: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section pdf 2026-05-12T14:36:10.029529919Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url= pages=-1 memory_pct_start=0.0 duration_ms=0 outcome=error error="layered stamp: page dims: dims: read: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section" pdf 2026-05-12T14:36:10.029531742Z โ”‚ --- PASS: TestTextStampV2_ServiceErrorMapsTo500 (0.00s) pdf 2026-05-12T14:36:10.029533643Z โ”‚ === RUN TestNewTextStampV2Handler_NoMonitor pdf 2026-05-12T14:36:10.029537248Z โ”‚ --- PASS: TestNewTextStampV2Handler_NoMonitor (0.00s) pdf 2026-05-12T14:36:10.029538921Z โ”‚ === RUN TestNewTextStampV2HandlerWithMonitor_StoresMonitor pdf 2026-05-12T14:36:10.029540458Z โ”‚ --- PASS: TestNewTextStampV2HandlerWithMonitor_StoresMonitor (0.00s) pdf 2026-05-12T14:36:10.029542142Z โ”‚ === RUN TestDownloadPDF_HappyPath pdf 2026-05-12T14:36:10.029543867Z โ”‚ --- PASS: TestDownloadPDF_HappyPath (0.00s) pdf 2026-05-12T14:36:10.029545469Z โ”‚ === RUN TestDownloadPDF_Non200 pdf 2026-05-12T14:36:10.029547025Z โ”‚ --- PASS: TestDownloadPDF_Non200 (0.00s) pdf 2026-05-12T14:36:10.029548646Z โ”‚ === RUN TestDownloadPDF_ExceedsSizeLimit pdf 2026-05-12T14:36:10.029557482Z โ”‚ --- PASS: TestDownloadPDF_ExceedsSizeLimit (0.80s) pdf 2026-05-12T14:36:10.029559077Z โ”‚ === RUN TestDownloadPDF_ConnectionRefused pdf 2026-05-12T14:36:10.029560770Z โ”‚ --- PASS: TestDownloadPDF_ConnectionRefused (0.00s) pdf 2026-05-12T14:36:10.029565369Z โ”‚ === RUN TestTextStampV2_PdfURL_ValidationReached pdf 2026-05-12T14:36:10.029566973Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Request received from 0.0.0.0, Content-Type: multipart/form-data; boundary=dd8c34a5f60c46aa79e7a9548f151020f3162978a1f505dafc839101b364, Content-Length: 446 pdf 2026-05-12T14:36:10.029568634Z โ”‚ 2026/05/12 21:36:09 [TextStampV2] Downloading PDF from URL: https://example.com/does-not-exist.pdf pdf 2026-05-12T14:36:10.029570185Z โ”‚ 2026/05/12 21:36:09 [text-stamp-v2] pdf_url=https://example.com/does-not-exist.pdf pages=-1 memory_pct_start=0.0 duration_ms=46 outcome=error error="Failed to download PDF: HTTP 404 Not Found" pdf 2026-05-12T14:36:10.029571821Z โ”‚ --- PASS: TestTextStampV2_PdfURL_ValidationReached (0.05s) pdf 2026-05-12T14:36:10.029573581Z โ”‚ === RUN TestReadPDFInput_CoversAllBranches pdf 2026-05-12T14:36:10.029575124Z โ”‚ --- PASS: TestReadPDFInput_CoversAllBranches (0.00s) pdf 2026-05-12T14:36:10.029577330Z โ”‚ PASS pdf 2026-05-12T14:36:10.029579070Z โ”‚ ok github.com/s0ngkran/pdf_watermark_process/internal/handler 5.023s pdf 2026-05-12T14:36:10.032179963Z โ”‚ ? github.com/s0ngkran/pdf_watermark_process/internal/memory [no test files] pdf 2026-05-12T14:36:10.032199274Z โ”‚ === RUN TestNewAPIKeyAuth pdf 2026-05-12T14:36:10.032202229Z โ”‚ === RUN TestNewAPIKeyAuth/valid_API_key_allows_request pdf 2026-05-12T14:36:10.032204084Z โ”‚ === RUN TestNewAPIKeyAuth/missing_API_key_returns_401 pdf 2026-05-12T14:36:10.032206149Z โ”‚ === RUN TestNewAPIKeyAuth/invalid_API_key_returns_401 pdf 2026-05-12T14:36:10.032209313Z โ”‚ === RUN TestNewAPIKeyAuth/health_check_skips_auth pdf 2026-05-12T14:36:10.032216578Z โ”‚ === RUN TestNewAPIKeyAuth/health_check_with_invalid_key_still_passes pdf 2026-05-12T14:36:10.032218409Z โ”‚ === RUN TestNewAPIKeyAuth/empty_configured_key_skips_auth_(dev_mode) pdf 2026-05-12T14:36:10.032220067Z โ”‚ === RUN TestNewAPIKeyAuth/empty_configured_key_skips_auth_even_with_header pdf 2026-05-12T14:36:10.032221882Z โ”‚ === RUN TestNewAPIKeyAuth/valid_key_on_merge_endpoint pdf 2026-05-12T14:36:10.032362629Z โ”‚ === RUN TestNewAPIKeyAuth/missing_key_on_merge_endpoint_returns_401 pdf 2026-05-12T14:36:10.032375468Z โ”‚ --- PASS: TestNewAPIKeyAuth (0.00s) pdf 2026-05-12T14:36:10.032377567Z โ”‚ --- PASS: TestNewAPIKeyAuth/valid_API_key_allows_request (0.00s) pdf 2026-05-12T14:36:10.032379625Z โ”‚ --- PASS: TestNewAPIKeyAuth/missing_API_key_returns_401 (0.00s) pdf 2026-05-12T14:36:10.032381310Z โ”‚ --- PASS: TestNewAPIKeyAuth/invalid_API_key_returns_401 (0.00s) pdf 2026-05-12T14:36:10.032394262Z โ”‚ --- PASS: TestNewAPIKeyAuth/health_check_skips_auth (0.00s) pdf 2026-05-12T14:36:10.032396053Z โ”‚ --- PASS: TestNewAPIKeyAuth/health_check_with_invalid_key_still_passes (0.00s) pdf 2026-05-12T14:36:10.032397977Z โ”‚ --- PASS: TestNewAPIKeyAuth/empty_configured_key_skips_auth_(dev_mode) (0.00s) pdf 2026-05-12T14:36:10.032401893Z โ”‚ --- PASS: TestNewAPIKeyAuth/empty_configured_key_skips_auth_even_with_header (0.00s) pdf 2026-05-12T14:36:10.032403728Z โ”‚ --- PASS: TestNewAPIKeyAuth/valid_key_on_merge_endpoint (0.00s) pdf 2026-05-12T14:36:10.032405392Z โ”‚ --- PASS: TestNewAPIKeyAuth/missing_key_on_merge_endpoint_returns_401 (0.00s) pdf 2026-05-12T14:36:10.032407449Z โ”‚ PASS pdf 2026-05-12T14:36:10.032409227Z โ”‚ ok github.com/s0ngkran/pdf_watermark_process/internal/middleware 0.006s pdf 2026-05-12T14:36:10.032411031Z โ”‚ === RUN TestChannelToByte pdf 2026-05-12T14:36:10.032412675Z โ”‚ --- PASS: TestChannelToByte (0.00s) pdf 2026-05-12T14:36:10.032414372Z โ”‚ === RUN TestToPdfY pdf 2026-05-12T14:36:10.032415984Z โ”‚ --- PASS: TestToPdfY (0.00s) pdf 2026-05-12T14:36:10.032417645Z โ”‚ === RUN TestLayer1RingPositions pdf 2026-05-12T14:36:10.032419600Z โ”‚ --- PASS: TestLayer1RingPositions (0.00s) pdf 2026-05-12T14:36:10.032421281Z โ”‚ === RUN TestBuildOverlayPDF_RejectsInvalidInputs pdf 2026-05-12T14:36:10.032422906Z โ”‚ --- PASS: TestBuildOverlayPDF_RejectsInvalidInputs (0.00s) pdf 2026-05-12T14:36:10.032424760Z โ”‚ === RUN TestBuildOverlayPDF_HappyPath_EmbeddedBytes pdf 2026-05-12T14:36:10.032426398Z โ”‚ --- PASS: TestBuildOverlayPDF_HappyPath_EmbeddedBytes (0.02s) pdf 2026-05-12T14:36:10.032428117Z โ”‚ === RUN TestBuildOverlayPDF_BadRegularFontBytes pdf 2026-05-12T14:36:10.032429728Z โ”‚ --- PASS: TestBuildOverlayPDF_BadRegularFontBytes (0.00s) pdf 2026-05-12T14:36:10.032431483Z โ”‚ === RUN TestBuildOverlayPDF_BadBoldFontBytes pdf 2026-05-12T14:36:10.032488148Z โ”‚ --- PASS: TestBuildOverlayPDF_BadBoldFontBytes (0.00s) pdf 2026-05-12T14:36:10.032491663Z โ”‚ === RUN TestBuildOverlayPDF_BytesWinOverPath pdf 2026-05-12T14:36:10.032493508Z โ”‚ --- PASS: TestBuildOverlayPDF_BytesWinOverPath (0.02s) pdf 2026-05-12T14:36:10.032495239Z โ”‚ === RUN TestBuildOverlayPDF_HappyPath_A4 pdf 2026-05-12T14:36:10.032496967Z โ”‚ --- PASS: TestBuildOverlayPDF_HappyPath_A4 (0.02s) pdf 2026-05-12T14:36:10.032498820Z โ”‚ === RUN TestBuildOverlayPDF_BlankFields_StillProducesPDF pdf 2026-05-12T14:36:10.032629224Z โ”‚ --- PASS: TestBuildOverlayPDF_BlankFields_StillProducesPDF (0.02s) pdf 2026-05-12T14:36:10.032632032Z โ”‚ === RUN TestBuildOverlayPDF_Landscape pdf 2026-05-12T14:36:10.032633702Z โ”‚ --- PASS: TestBuildOverlayPDF_Landscape (0.01s) pdf 2026-05-12T14:36:10.032639930Z โ”‚ === RUN TestBuildOverlayPDF_MissingFontFile pdf 2026-05-12T14:36:10.032641655Z โ”‚ --- PASS: TestBuildOverlayPDF_MissingFontFile (0.00s) pdf 2026-05-12T14:36:10.032643494Z โ”‚ === RUN TestStudentDataZeroValueIsValid pdf 2026-05-12T14:36:10.032645421Z โ”‚ --- PASS: TestStudentDataZeroValueIsValid (0.00s) pdf 2026-05-12T14:36:10.032647256Z โ”‚ === RUN TestBuildOverlayPDF_BadRegularFontPath pdf 2026-05-12T14:36:10.032648900Z โ”‚ --- PASS: TestBuildOverlayPDF_BadRegularFontPath (0.00s) pdf 2026-05-12T14:36:10.032650562Z โ”‚ === RUN TestBuildOverlayPDF_BadBoldFontPath pdf 2026-05-12T14:36:10.032652189Z โ”‚ --- PASS: TestBuildOverlayPDF_BadBoldFontPath (0.00s) pdf 2026-05-12T14:36:10.032654241Z โ”‚ === RUN TestLayerColorConstants pdf 2026-05-12T14:36:10.032655901Z โ”‚ --- PASS: TestLayerColorConstants (0.00s) pdf 2026-05-12T14:36:10.032671980Z โ”‚ === RUN TestLayer3BrandText pdf 2026-05-12T14:36:10.032673741Z โ”‚ --- PASS: TestLayer3BrandText (0.00s) pdf 2026-05-12T14:36:10.032778108Z โ”‚ === RUN TestLayer4LabelUsesEnDash pdf 2026-05-12T14:36:10.032782316Z โ”‚ --- PASS: TestLayer4LabelUsesEnDash (0.00s) pdf 2026-05-12T14:36:10.032784016Z โ”‚ === RUN TestBuildOverlayPDF_Layer3Renders pdf 2026-05-12T14:36:10.032785882Z โ”‚ --- PASS: TestBuildOverlayPDF_Layer3Renders (0.01s) pdf 2026-05-12T14:36:10.032787743Z โ”‚ === RUN TestBuildOverlayPDF_WithPdfName pdf 2026-05-12T14:36:10.032789475Z โ”‚ --- PASS: TestBuildOverlayPDF_WithPdfName (0.01s) pdf 2026-05-12T14:36:10.032791639Z โ”‚ === RUN TestBuildOverlayPDF_EmptyPdfName_NoCornerLayer pdf 2026-05-12T14:36:10.032793299Z โ”‚ --- PASS: TestBuildOverlayPDF_EmptyPdfName_NoCornerLayer (0.01s) pdf 2026-05-12T14:36:10.032795104Z โ”‚ === RUN TestDrawLayerCorner_RendersFullFormatWhenLastUpdatedSet pdf 2026-05-12T14:36:10.032797101Z โ”‚ --- PASS: TestDrawLayerCorner_RendersFullFormatWhenLastUpdatedSet (0.02s) pdf 2026-05-12T14:36:10.032798737Z โ”‚ === RUN TestDrawLayerCorner_OmitsLastUpdatedSuffixWhenEmpty pdf 2026-05-12T14:36:10.032800331Z โ”‚ --- PASS: TestDrawLayerCorner_OmitsLastUpdatedSuffixWhenEmpty (0.03s) pdf 2026-05-12T14:36:10.032802014Z โ”‚ === RUN TestHideWatermarkOCG_DisablesMatchingLayer pdf 2026-05-12T14:36:10.032803671Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: matched and disabled OCG "Watermark" pdf 2026-05-12T14:36:10.032805482Z โ”‚ --- PASS: TestHideWatermarkOCG_DisablesMatchingLayer (0.01s) pdf 2026-05-12T14:36:10.032807133Z โ”‚ === RUN TestHideWatermarkOCG_CaseInsensitiveMatch pdf 2026-05-12T14:36:10.032808849Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: matched and disabled OCG "Watermark" pdf 2026-05-12T14:36:10.032810495Z โ”‚ --- PASS: TestHideWatermarkOCG_CaseInsensitiveMatch (0.01s) pdf 2026-05-12T14:36:10.032812102Z โ”‚ === RUN TestHideWatermarkOCG_NoOCG_Passthrough pdf 2026-05-12T14:36:10.032814162Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.032815858Z โ”‚ --- PASS: TestHideWatermarkOCG_NoOCG_Passthrough (0.00s) pdf 2026-05-12T14:36:10.032817400Z โ”‚ === RUN TestHideWatermarkOCG_OCGWithDifferentName_Passthrough pdf 2026-05-12T14:36:10.032818982Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.032820667Z โ”‚ --- PASS: TestHideWatermarkOCG_OCGWithDifferentName_Passthrough (0.00s) pdf 2026-05-12T14:36:10.032822368Z โ”‚ === RUN TestOcgNameEquals_SupportsStringLiteralAndHex pdf 2026-05-12T14:36:10.032823951Z โ”‚ --- PASS: TestOcgNameEquals_SupportsStringLiteralAndHex (0.00s) pdf 2026-05-12T14:36:10.032825491Z โ”‚ === RUN TestHideWatermarkOCG_GarbageInput_ReturnsError pdf 2026-05-12T14:36:10.032827003Z โ”‚ --- PASS: TestHideWatermarkOCG_GarbageInput_ReturnsError (0.00s) pdf 2026-05-12T14:36:10.032828811Z โ”‚ === RUN TestApplyOverlayPages_SinglePage pdf 2026-05-12T14:36:10.032830389Z โ”‚ --- PASS: TestApplyOverlayPages_SinglePage (0.02s) pdf 2026-05-12T14:36:10.032831957Z โ”‚ === RUN TestApplyOverlayPages_MultiPage_AllPages pdf 2026-05-12T14:36:10.032833676Z โ”‚ --- PASS: TestApplyOverlayPages_MultiPage_AllPages (0.02s) pdf 2026-05-12T14:36:10.032835339Z โ”‚ === RUN TestApplyOverlayPages_SpecificPages pdf 2026-05-12T14:36:10.032836975Z โ”‚ --- PASS: TestApplyOverlayPages_SpecificPages (0.03s) pdf 2026-05-12T14:36:10.032838587Z โ”‚ === RUN TestApplyOverlayPages_EmptyInput pdf 2026-05-12T14:36:10.032842745Z โ”‚ --- PASS: TestApplyOverlayPages_EmptyInput (0.00s) pdf 2026-05-12T14:36:10.032844493Z โ”‚ === RUN TestApplyOverlayPages_EmptyOverlay pdf 2026-05-12T14:36:10.032846035Z โ”‚ --- PASS: TestApplyOverlayPages_EmptyOverlay (0.00s) pdf 2026-05-12T14:36:10.032847590Z โ”‚ === RUN TestApplyOverlayPages_GarbageOverlay pdf 2026-05-12T14:36:10.032849284Z โ”‚ --- PASS: TestApplyOverlayPages_GarbageOverlay (0.00s) pdf 2026-05-12T14:36:10.032850935Z โ”‚ === RUN TestApplyOverlayPages_PDF14WithStructElementDictE pdf 2026-05-12T14:36:10.032852622Z โ”‚ --- PASS: TestApplyOverlayPages_PDF14WithStructElementDictE (0.03s) pdf 2026-05-12T14:36:10.032854140Z โ”‚ === RUN TestPageDimensions_ReturnsPerPageSizes pdf 2026-05-12T14:36:10.032855706Z โ”‚ --- PASS: TestPageDimensions_ReturnsPerPageSizes (0.00s) pdf 2026-05-12T14:36:10.032857435Z โ”‚ === RUN TestPageDimensions_GarbageInput pdf 2026-05-12T14:36:10.032858972Z โ”‚ --- PASS: TestPageDimensions_GarbageInput (0.00s) pdf 2026-05-12T14:36:10.032860548Z โ”‚ === RUN TestPageDimensions_PDF14WithStructElementDictE pdf 2026-05-12T14:36:10.032862044Z โ”‚ --- PASS: TestPageDimensions_PDF14WithStructElementDictE (0.01s) pdf 2026-05-12T14:36:10.032863643Z โ”‚ === RUN TestPageDimensions_EmptyBytes pdf 2026-05-12T14:36:10.032865179Z โ”‚ --- PASS: TestPageDimensions_EmptyBytes (0.00s) pdf 2026-05-12T14:36:10.032866740Z โ”‚ === RUN TestPageDimensions_HeaderOnly pdf 2026-05-12T14:36:10.032868286Z โ”‚ --- PASS: TestPageDimensions_HeaderOnly (0.00s) pdf 2026-05-12T14:36:10.032869815Z โ”‚ === RUN TestPageDimensions_MixedDims pdf 2026-05-12T14:36:10.032957533Z โ”‚ --- PASS: TestPageDimensions_MixedDims (0.00s) pdf 2026-05-12T14:36:10.032960344Z โ”‚ === RUN TestPageDimensionsFile_RoundTrip pdf 2026-05-12T14:36:10.032962525Z โ”‚ --- PASS: TestPageDimensionsFile_RoundTrip (0.00s) pdf 2026-05-12T14:36:10.032964225Z โ”‚ === RUN TestPageDimensionsFile_MissingFile pdf 2026-05-12T14:36:10.032965922Z โ”‚ --- PASS: TestPageDimensionsFile_MissingFile (0.00s) pdf 2026-05-12T14:36:10.032967495Z โ”‚ === RUN TestGroupPagesByDim_AllSameSize pdf 2026-05-12T14:36:10.032969081Z โ”‚ --- PASS: TestGroupPagesByDim_AllSameSize (0.00s) pdf 2026-05-12T14:36:10.032970754Z โ”‚ === RUN TestGroupPagesByDim_MixedSizes pdf 2026-05-12T14:36:10.033070135Z โ”‚ --- PASS: TestGroupPagesByDim_MixedSizes (0.00s) pdf 2026-05-12T14:36:10.033072740Z โ”‚ === RUN TestGroupPagesByDim_Tolerance pdf 2026-05-12T14:36:10.033074489Z โ”‚ --- PASS: TestGroupPagesByDim_Tolerance (0.00s) pdf 2026-05-12T14:36:10.033076262Z โ”‚ === RUN TestGroupPagesByDim_NegativeToleranceFallsBackToDefault pdf 2026-05-12T14:36:10.033078238Z โ”‚ --- PASS: TestGroupPagesByDim_NegativeToleranceFallsBackToDefault (0.00s) pdf 2026-05-12T14:36:10.033080247Z โ”‚ === RUN TestBuildPageSelection pdf 2026-05-12T14:36:10.033081907Z โ”‚ --- PASS: TestBuildPageSelection (0.00s) pdf 2026-05-12T14:36:10.033083895Z โ”‚ === RUN TestEnsureReadable_ValidPDF pdf 2026-05-12T14:36:10.033085662Z โ”‚ --- PASS: TestEnsureReadable_ValidPDF (0.01s) pdf 2026-05-12T14:36:10.033087562Z โ”‚ === RUN TestEnsureReadable_Garbage pdf 2026-05-12T14:36:10.033089325Z โ”‚ --- PASS: TestEnsureReadable_Garbage (0.00s) pdf 2026-05-12T14:36:10.033091120Z โ”‚ === RUN TestMergePDFs_Concatenates pdf 2026-05-12T14:36:10.033093049Z โ”‚ 2026/05/12 21:36:05 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_4216651753 pdf 2026-05-12T14:36:10.033094841Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: starting, 2 PDFs to merge pdf 2026-05-12T14:36:10.033099434Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: read PDF 0, pages: 2 pdf 2026-05-12T14:36:10.033101199Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: read PDF 1, pages: 1 pdf 2026-05-12T14:36:10.033102999Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: merged PDF 1, dest pages: 3 pdf 2026-05-12T14:36:10.033104703Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: completed, output size: 9065 bytes pdf 2026-05-12T14:36:10.033106404Z โ”‚ --- PASS: TestMergePDFs_Concatenates (0.01s) pdf 2026-05-12T14:36:10.033108374Z โ”‚ === RUN TestMergePDFs_SinglePDF_PassThrough pdf 2026-05-12T14:36:10.033110037Z โ”‚ 2026/05/12 21:36:05 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_4294797532 pdf 2026-05-12T14:36:10.033111805Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: starting, 1 PDFs to merge pdf 2026-05-12T14:36:10.033113430Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: only 1 PDF, returning as-is pdf 2026-05-12T14:36:10.033115073Z โ”‚ --- PASS: TestMergePDFs_SinglePDF_PassThrough (0.00s) pdf 2026-05-12T14:36:10.033116790Z โ”‚ === RUN TestMergePDFs_RejectsEmpty pdf 2026-05-12T14:36:10.033118407Z โ”‚ 2026/05/12 21:36:05 [DEBUG] NewProcessor: created temp directory: /tmp/pdf_watermark_4094201731 pdf 2026-05-12T14:36:10.033233214Z โ”‚ 2026/05/12 21:36:05 [DEBUG] MergePDFs: starting, 0 PDFs to merge pdf 2026-05-12T14:36:10.033237229Z โ”‚ 2026/05/12 21:36:05 [ERROR] MergePDFs: no PDFs to merge pdf 2026-05-12T14:36:10.033239180Z โ”‚ --- PASS: TestMergePDFs_RejectsEmpty (0.00s) pdf 2026-05-12T14:36:10.033241018Z โ”‚ PASS pdf 2026-05-12T14:36:10.033242776Z โ”‚ ok github.com/s0ngkran/pdf_watermark_process/internal/pdf 0.335s pdf 2026-05-12T14:36:10.033244412Z โ”‚ === RUN TestNewLayeredStampService_WiresConfig pdf 2026-05-12T14:36:10.033246294Z โ”‚ --- PASS: TestNewLayeredStampService_WiresConfig (0.00s) pdf 2026-05-12T14:36:10.033248000Z โ”‚ === RUN TestLayeredStampService_ProcessPDF_EmptyInput pdf 2026-05-12T14:36:10.033249824Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_EmptyInput (0.00s) pdf 2026-05-12T14:36:10.033251454Z โ”‚ === RUN TestLayeredStampService_ProcessPDF_GarbageInput pdf 2026-05-12T14:36:10.033255190Z โ”‚ 2026/05/12 21:36:04 [LayeredStamp] OCG hide failed (passthrough): ocg: read context: ReadContext failed: Read: xRefTable failed: pdfcpu: can't find last xref section pdf 2026-05-12T14:36:10.033257010Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_GarbageInput (0.00s) pdf 2026-05-12T14:36:10.033258556Z โ”‚ === RUN TestLayeredStampService_ProcessPDF_HappyPath pdf 2026-05-12T14:36:10.033260446Z โ”‚ 2026/05/12 21:36:04 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.033262185Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_HappyPath (0.03s) pdf 2026-05-12T14:36:10.033264002Z โ”‚ === RUN TestLayeredStampService_ProcessPDF_NoFlattening_OutputSearchable pdf 2026-05-12T14:36:10.033265649Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.033267312Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_NoFlattening_OutputSearchable (0.02s) pdf 2026-05-12T14:36:10.033268979Z โ”‚ === RUN TestLayeredStampService_ProcessPDF_MixedPageSizes pdf 2026-05-12T14:36:10.033270652Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.033272282Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_MixedPageSizes (0.02s) pdf 2026-05-12T14:36:10.033273935Z โ”‚ === RUN TestProcessOptions_WithPdfName pdf 2026-05-12T14:36:10.033278099Z โ”‚ --- PASS: TestProcessOptions_WithPdfName (0.00s) pdf 2026-05-12T14:36:10.033279705Z โ”‚ === RUN TestProcessOptions_WithLastUpdated pdf 2026-05-12T14:36:10.033281297Z โ”‚ --- PASS: TestProcessOptions_WithLastUpdated (0.00s) pdf 2026-05-12T14:36:10.033282895Z โ”‚ === RUN TestLayeredStampService_ProcessPDF_AppliesOptions pdf 2026-05-12T14:36:10.033284601Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.033286214Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_AppliesOptions (0.02s) pdf 2026-05-12T14:36:10.033287805Z โ”‚ === RUN TestLayeredStampService_ProcessPDF_RespectsContextCancel pdf 2026-05-12T14:36:10.033289405Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_RespectsContextCancel (0.01s) pdf 2026-05-12T14:36:10.033291099Z โ”‚ === RUN TestLayeredStampService_ProcessPDF_DeadlineTightenedIsSafe pdf 2026-05-12T14:36:10.033292745Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.033294405Z โ”‚ 2026/05/12 21:36:05 [DEBUG] HideWatermarkOCG: no OCG matched "Watermark", passthrough pdf 2026-05-12T14:36:10.033295940Z โ”‚ --- PASS: TestLayeredStampService_ProcessPDF_DeadlineTightenedIsSafe (0.02s) pdf 2026-05-12T14:36:10.033297799Z โ”‚ === RUN TestCalculateWorkerCount pdf 2026-05-12T14:36:10.033299447Z โ”‚ === RUN TestCalculateWorkerCount/zero_ratio_returns_at_least_1 pdf 2026-05-12T14:36:10.033301130Z โ”‚ === RUN TestCalculateWorkerCount/negative_ratio_returns_at_least_1 pdf 2026-05-12T14:36:10.033302730Z โ”‚ === RUN TestCalculateWorkerCount/positive_ratio_returns_at_least_1 pdf 2026-05-12T14:36:10.033306190Z โ”‚ === RUN TestCalculateWorkerCount/full_ratio_returns_at_least_1 pdf 2026-05-12T14:36:10.033307926Z โ”‚ --- PASS: TestCalculateWorkerCount (0.00s) pdf 2026-05-12T14:36:10.033309552Z โ”‚ --- PASS: TestCalculateWorkerCount/zero_ratio_returns_at_least_1 (0.00s) pdf 2026-05-12T14:36:10.033311188Z โ”‚ --- PASS: TestCalculateWorkerCount/negative_ratio_returns_at_least_1 (0.00s) pdf 2026-05-12T14:36:10.033312839Z โ”‚ --- PASS: TestCalculateWorkerCount/positive_ratio_returns_at_least_1 (0.00s) pdf 2026-05-12T14:36:10.033314341Z โ”‚ --- PASS: TestCalculateWorkerCount/full_ratio_returns_at_least_1 (0.00s) pdf 2026-05-12T14:36:10.033315888Z โ”‚ === RUN TestCalculatePageRanges pdf 2026-05-12T14:36:10.033317436Z โ”‚ === RUN TestCalculatePageRanges/10_pages,_2_workers pdf 2026-05-12T14:36:10.033319253Z โ”‚ === RUN TestCalculatePageRanges/10_pages,_3_workers_(uneven_split) pdf 2026-05-12T14:36:10.033348331Z โ”‚ === RUN TestCalculatePageRanges/1_page,_4_workers_(more_workers_than_pages) pdf 2026-05-12T14:36:10.033351461Z โ”‚ === RUN TestCalculatePageRanges/5_pages,_1_worker pdf 2026-05-12T14:36:10.033353363Z โ”‚ === RUN TestCalculatePageRanges/zero_workers_defaults_to_1 pdf 2026-05-12T14:36:10.033355218Z โ”‚ --- PASS: TestCalculatePageRanges (0.00s) pdf 2026-05-12T14:36:10.033356936Z โ”‚ --- PASS: TestCalculatePageRanges/10_pages,_2_workers (0.00s) pdf 2026-05-12T14:36:10.033358564Z โ”‚ --- PASS: TestCalculatePageRanges/10_pages,_3_workers_(uneven_split) (0.00s) pdf 2026-05-12T14:36:10.033360408Z โ”‚ --- PASS: TestCalculatePageRanges/1_page,_4_workers_(more_workers_than_pages) (0.00s) pdf 2026-05-12T14:36:10.033362068Z โ”‚ --- PASS: TestCalculatePageRanges/5_pages,_1_worker (0.00s) pdf 2026-05-12T14:36:10.033363693Z โ”‚ --- PASS: TestCalculatePageRanges/zero_workers_defaults_to_1 (0.00s) pdf 2026-05-12T14:36:10.033365429Z โ”‚ === RUN TestCalculatePageRanges_Contiguous pdf 2026-05-12T14:36:10.033369628Z โ”‚ --- PASS: TestCalculatePageRanges_Contiguous (0.00s) pdf 2026-05-12T14:36:10.033371299Z โ”‚ === RUN TestCalculateMemoryAwareWorkerCount_NilMonitor pdf 2026-05-12T14:36:10.033372926Z โ”‚ --- PASS: TestCalculateMemoryAwareWorkerCount_NilMonitor (0.00s) pdf 2026-05-12T14:36:10.033374542Z โ”‚ === RUN TestCalculateMemoryAwareWorkerCount_ZeroThreshold pdf 2026-05-12T14:36:10.033376338Z โ”‚ --- PASS: TestCalculateMemoryAwareWorkerCount_ZeroThreshold (0.00s) pdf 2026-05-12T14:36:10.033378155Z โ”‚ PASS pdf 2026-05-12T14:36:10.033379855Z โ”‚ ok github.com/s0ngkran/pdf_watermark_process/internal/service 0.121s pdf 2026-05-12T14:36:10.237810984Z โ”‚ net pdf 2026-05-12T14:36:10.728898462Z โ”‚ vendor/golang.org/x/net/http/httpproxy pdf 2026-05-12T14:36:10.728927826Z โ”‚ github.com/valyala/tcplisten pdf 2026-05-12T14:36:10.728931058Z โ”‚ github.com/valyala/fasthttp/fasthttputil pdf 2026-05-12T14:36:10.728933381Z โ”‚ github.com/google/uuid pdf 2026-05-12T14:36:10.728936049Z โ”‚ net/textproto pdf 2026-05-12T14:36:10.729237285Z โ”‚ github.com/mitchellh/mapstructure pdf 2026-05-12T14:36:10.729255100Z โ”‚ crypto/x509 pdf 2026-05-12T14:36:10.730479820Z โ”‚ github.com/spf13/pflag pdf 2026-05-12T14:36:10.772981441Z โ”‚ github.com/valyala/fasthttp/reuseport pdf 2026-05-12T14:36:10.795381108Z โ”‚ vendor/golang.org/x/net/http/httpguts pdf 2026-05-12T14:36:10.796730297Z โ”‚ mime/multipart pdf 2026-05-12T14:36:10.827637824Z โ”‚ github.com/gofiber/fiber/v2/utils pdf 2026-05-12T14:36:11.168304542Z โ”‚ crypto/tls pdf 2026-05-12T14:36:11.810479770Z โ”‚ net/http/httptrace pdf 2026-05-12T14:36:11.841520220Z โ”‚ net/http/internal/httpcommon pdf 2026-05-12T14:36:11.889196958Z โ”‚ net/http pdf 2026-05-12T14:36:13.003130470Z โ”‚ net/http/httputil pdf 2026-05-12T14:36:13.003390469Z โ”‚ github.com/spf13/afero pdf 2026-05-12T14:36:13.004386681Z โ”‚ github.com/magiconair/properties pdf 2026-05-12T14:36:13.004657458Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu/primitives pdf 2026-05-12T14:36:13.012871306Z โ”‚ github.com/andybalholm/brotli pdf 2026-05-12T14:36:13.171837974Z โ”‚ github.com/spf13/viper/internal/encoding/javaproperties pdf 2026-05-12T14:36:13.233062694Z โ”‚ github.com/spf13/viper pdf 2026-05-12T14:36:13.426917294Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/config pdf 2026-05-12T14:36:13.516495606Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu/create pdf 2026-05-12T14:36:13.516699728Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu/form pdf 2026-05-12T14:36:13.518114710Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu pdf 2026-05-12T14:36:14.417305983Z โ”‚ github.com/valyala/fasthttp pdf 2026-05-12T14:36:14.517202559Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/pdfcpu/validate pdf 2026-05-12T14:36:15.097631978Z โ”‚ github.com/pdfcpu/pdfcpu/pkg/api pdf 2026-05-12T14:36:15.286231543Z โ”‚ github.com/gofiber/fiber/v2 pdf 2026-05-12T14:36:15.399855066Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/pdf pdf 2026-05-12T14:36:15.499476170Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/service pdf 2026-05-12T14:36:15.724313169Z โ”‚ github.com/gofiber/fiber/v2/middleware/cors pdf 2026-05-12T14:36:15.724838909Z โ”‚ github.com/gofiber/fiber/v2/middleware/recover pdf 2026-05-12T14:36:15.725189112Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/middleware pdf 2026-05-12T14:36:15.725197242Z โ”‚ github.com/s0ngkran/pdf_watermark_process/internal/handler pdf 2026-05-12T14:36:15.725222599Z โ”‚ github.com/gofiber/fiber/v2/middleware/logger pdf 2026-05-12T14:36:15.878660114Z โ”‚ github.com/s0ngkran/pdf_watermark_process/cmd/server pdf 2026-05-12T14:36:16.970509972Z โ”‚ INFO[0098] Taking snapshot of files... pdf 2026-05-12T14:36:20.829821216Z โ”‚ INFO[0102] Pushing layer to cache now pdf 2026-05-12T14:36:20.831411264Z โ”‚ INFO[0102] Pushing image to pdf 2026-05-12T14:36:24.850542469Z โ”‚ INFO[0106] Pushed pdf 2026-05-12T14:36:24.851464471Z โ”‚ INFO[0106] Saving file app/dist/server for later use pdf 2026-05-12T14:36:24.864372643Z โ”‚ INFO[0106] Deleting filesystem... pdf 2026-05-12T14:36:25.787232356Z โ”‚ INFO[0107] Retrieving image manifest debian:bookworm-slim pdf 2026-05-12T14:36:25.787258689Z โ”‚ INFO[0107] Returning cached image manifest pdf 2026-05-12T14:36:25.787260850Z โ”‚ INFO[0107] Retrieving image manifest debian:bookworm-slim pdf 2026-05-12T14:36:25.787262791Z โ”‚ INFO[0107] Returning cached image manifest pdf 2026-05-12T14:36:25.787264680Z โ”‚ INFO[0107] Executing 0 build triggers pdf 2026-05-12T14:36:25.787269653Z โ”‚ INFO[0107] Building stage 'debian:bookworm-slim' [idx: '1', base-idx: '-1'] pdf 2026-05-12T14:36:25.787271744Z โ”‚ INFO[0107] Applying label maintainer=Chatchanan Panyaprasirtkit pdf 2026-05-12T14:36:25.787844448Z โ”‚ INFO[0107] Checking for cached layer pdf 2026-05-12T14:36:25.904517753Z โ”‚ INFO[0107] Using caching version of cmd: RUN apt-get update && apt-get install -y --no-install-recommends tini ca-certificates && apt-get clean && rm -rf /var/lib/apt/lists/* pdf 2026-05-12T14:36:25.904542489Z โ”‚ INFO[0107] Checking for cached layer pdf 2026-05-12T14:36:26.009308687Z โ”‚ INFO[0107] Using caching version of cmd: RUN useradd -u 1000 -m -s /bin/bash appuser pdf 2026-05-12T14:36:26.039327118Z โ”‚ INFO[0107] Checking for cached layer pdf 2026-05-12T14:36:26.070279399Z โ”‚ INFO[0107] No cached layer found for cmd RUN mkdir -p /app/.pdfcpu pdf 2026-05-12T14:36:26.070329166Z โ”‚ INFO[0107] Cmd: USER pdf 2026-05-12T14:36:26.070332132Z โ”‚ INFO[0107] Cmd: EXPOSE pdf 2026-05-12T14:36:26.070335105Z โ”‚ INFO[0107] Adding exposed port: 8080/tcp pdf 2026-05-12T14:36:26.070337803Z โ”‚ INFO[0107] Adding exposed port: 8443/tcp pdf 2026-05-12T14:36:26.070340987Z โ”‚ INFO[0107] Unpacking rootfs as cmd COPY --from=builder /app/dist/server /app/server requires it. pdf 2026-05-12T14:36:26.841882211Z โ”‚ INFO[0108] Initializing snapshotter ... pdf 2026-05-12T14:36:26.841910121Z โ”‚ INFO[0108] Taking snapshot of full filesystem... pdf 2026-05-12T14:36:27.617609317Z โ”‚ INFO[0109] LABEL maintainer="Chatchanan Panyaprasirtkit " pdf 2026-05-12T14:36:27.617634888Z โ”‚ INFO[0109] Applying label maintainer=Chatchanan Panyaprasirtkit pdf 2026-05-12T14:36:27.618326926Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:27.618347113Z โ”‚ INFO[0109] ARG timezone=Asia/Bangkok pdf 2026-05-12T14:36:27.618349706Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:27.618371958Z โ”‚ INFO[0109] ENV LANG C.UTF-8 pdf 2026-05-12T14:36:27.618373756Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:27.618375323Z โ”‚ INFO[0109] ENV LC_ALL C.UTF-8 pdf 2026-05-12T14:36:27.618376967Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:27.618378724Z โ”‚ INFO[0109] ENV TZ $timezone pdf 2026-05-12T14:36:27.618589977Z โ”‚ INFO[0109] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:27.618605757Z โ”‚ INFO[0109] RUN apt-get update && apt-get install -y --no-install-recommends tini ca-certificates && apt-get clean && rm -rf /var/lib/apt/lists/* pdf 2026-05-12T14:36:27.618608465Z โ”‚ INFO[0109] Found cached layer, extracting to filesystem pdf 2026-05-12T14:36:28.319411115Z โ”‚ INFO[0110] RUN useradd -u 1000 -m -s /bin/bash appuser pdf 2026-05-12T14:36:28.319467027Z โ”‚ INFO[0110] Found cached layer, extracting to filesystem pdf 2026-05-12T14:36:28.458010160Z โ”‚ INFO[0110] WORKDIR /app pdf 2026-05-12T14:36:28.458039396Z โ”‚ INFO[0110] Cmd: workdir pdf 2026-05-12T14:36:28.458042131Z โ”‚ INFO[0110] Changed working directory to /app pdf 2026-05-12T14:36:28.458044614Z โ”‚ INFO[0110] Creating directory /app with uid -1 and gid -1 pdf 2026-05-12T14:36:28.458058048Z โ”‚ INFO[0110] Taking snapshot of files... pdf 2026-05-12T14:36:28.489195864Z โ”‚ INFO[0110] COPY --from=builder /app/dist/server /app/server pdf 2026-05-12T14:36:28.500072444Z โ”‚ INFO[0110] Taking snapshot of files... pdf 2026-05-12T14:36:28.780721656Z โ”‚ INFO[0110] RUN mkdir -p /app/.pdfcpu pdf 2026-05-12T14:36:28.835479946Z โ”‚ INFO[0110] Cmd: /bin/sh pdf 2026-05-12T14:36:28.835502571Z โ”‚ INFO[0110] Args: [-c mkdir -p /app/.pdfcpu] pdf 2026-05-12T14:36:28.835504766Z โ”‚ INFO[0110] Running: [/bin/sh -c mkdir -p /app/.pdfcpu] pdf 2026-05-12T14:36:28.885990769Z โ”‚ INFO[0110] Taking snapshot of files... pdf 2026-05-12T14:36:28.894670559Z โ”‚ INFO[0110] Pushing layer to cache now pdf 2026-05-12T14:36:28.895062854Z โ”‚ INFO[0110] Pushing image to pdf 2026-05-12T14:36:28.895394253Z โ”‚ INFO[0110] RUN chown -R appuser:nogroup /app pdf 2026-05-12T14:36:28.943117145Z โ”‚ INFO[0110] Cmd: /bin/sh pdf 2026-05-12T14:36:28.943386652Z โ”‚ INFO[0110] Args: [-c chown -R appuser:nogroup /app] pdf 2026-05-12T14:36:28.943826065Z โ”‚ INFO[0110] Running: [/bin/sh -c chown -R appuser:nogroup /app] pdf 2026-05-12T14:36:28.996133518Z โ”‚ INFO[0110] Taking snapshot of files... pdf 2026-05-12T14:36:29.293337902Z โ”‚ INFO[0110] Pushing layer to cache now pdf 2026-05-12T14:36:29.293363214Z โ”‚ INFO[0110] Pushing image to pdf 2026-05-12T14:36:29.306760398Z โ”‚ INFO[0111] USER appuser pdf 2026-05-12T14:36:29.306783338Z โ”‚ INFO[0111] Cmd: USER pdf 2026-05-12T14:36:29.307952655Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:29.307959032Z โ”‚ INFO[0111] ENV PDFCPU_CONF_DIR=/app/.pdfcpu pdf 2026-05-12T14:36:29.307961078Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:29.307962853Z โ”‚ INFO[0111] EXPOSE 8080 8443 pdf 2026-05-12T14:36:29.307964912Z โ”‚ INFO[0111] Cmd: EXPOSE pdf 2026-05-12T14:36:29.307966572Z โ”‚ INFO[0111] Adding exposed port: 8080/tcp pdf 2026-05-12T14:36:29.307968192Z โ”‚ INFO[0111] Adding exposed port: 8443/tcp pdf 2026-05-12T14:36:29.308216159Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:29.308219521Z โ”‚ INFO[0111] ENTRYPOINT ["tini", "--", "/app/server"] pdf 2026-05-12T14:36:29.308222597Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:29.308224423Z โ”‚ INFO[0111] CMD ["--env=prd"] pdf 2026-05-12T14:36:29.308226236Z โ”‚ INFO[0111] No files changed in this command, skipping snapshotting. pdf 2026-05-12T14:36:29.563572936Z โ”‚ INFO[0111] Pushed pdf 2026-05-12T14:36:30.290903264Z โ”‚ INFO[0111] Pushed pdf 2026-05-12T14:36:30.291416187Z โ”‚ INFO[0111] Pushing image to pdf 2026-05-12T14:36:31.389936427Z โ”‚ INFO[0113] Pushed pdf 2026-05-12T14:36:31.425621531Z โ”‚ pdf 2026-05-12T14:36:31.561515261Z โ”‚  โœ” built and uploaded app container image to DOCR pdf 2026-05-12T14:36:31.563480198Z โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ผ pdf 2026-05-12T14:36:31.563487000Z pdf 2026-05-12T14:36:31.569729708Z  โœ”  build complete  pdf 2026-05-12T14:36:31.569745709Z