Skip to content

'\u0000' в изход от тестове води до невъзможност за завършване на тестовете #191

@mstoykov

Description

@mstoykov

Санитизиран лог от sidekiq-а на golang сайта:

2016-12-29T13:47:20Z 30451 TID-REMOVED TaskCheckWorker JID-REMOVED INFO: start
2016-12-29T13:47:45Z 30451 TID-REMOVED TaskCheckWorker JID-REMOVED INFO: fail: 24.501 sec
2016-12-29T13:47:45Z 30451 TID-REMOVED WARN: {"retry"=>true, "queue"=>"default", "class"=>"TaskCheckWorker", "args"=>["4"], "jid"=>"REMOVED", "enqueued_at"=>1483019064.9113793, "error_message"=>"string contains null byte", "error_class"=>"ArgumentError", "failed_at"=>1483019089.485739, "retry_count"=>2, "retried_at"=>1483019265.313762}
2016-12-29T13:47:45Z 30451 TID-REMOVED WARN: string contains null byte
2016-12-29T13:47:45Z 30451 TID-REMOVED WARN:/ruby/2.3.0/gems/activerecord-4.0.13/lib/active_record/connection_adapters/postgresql_adapter.rb:806:in `send_query_prepared'

Това се случва, защото едно от решенията на студент не е вярно и при изписването на какво е върнал се изпизва и 0-лев байт в изхода. Този нулев байт съответно се вижда в изхода от
go run /path/to/runner.go -- solution_test.go (с правено копирани файлове) като нещо от вида на :
but got 'T\u0000'\nFAIL
Това съответно си се парсва и подава наляво надясно като в края на краищата довежда до горната грешка.

Търсейки решения достигнах до това issue, което обаче е оправя само за bytea колони в по нови rails-и, а log е text и преминаването към по нови версии на rails поне при мен доведе до страхотни грешки и аларми че разни неща вече ги няма.

Практически моя проблем ще си го реша с escape-ване какво пиша към изхода в тестовете.

Това обаче не пречи на студент, случайно или нарочно, да пише нулеви байтове в изхода. Също така теоритично това би трябвало да се escape-ва и да може да влезе в text колоната като се unescape-не като се вади, но ruby/rails познанията ми не достигат до такива разбирания на activerecord и неговите магии :)

Дори горното да не е възможно ще е хубаво да се хваща и да е проблем само за студента, а не тестовете да се пускат наново и наново без успех.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions