Тестирование вывода журнала из GitHub.com/Shopify/sarama

#go #sarama

#Вперед #сарама

Вопрос:

Я пытаюсь написать модульный тест для функциональной опции, которая настраивается github.com/Shopify/sarama . Logger После запуска контейнера Docker с Kafka следующим образом,

 docker run -p 2181:2181 -p 9092:9092 -e ADVERTISED_HOST=127.0.0.1  -e NUM_PARTITIONS=10 johnnypark/kafka-zookeeper
  

Я пытаюсь запустить эту программу:

 package main

import (
    "bufio"
    "bytes"
    "io/ioutil"
    "log"

    "github.com/Shopify/sarama"
)

func main() {
    var b bytes.Buffer
    out := bufio.NewWriter(amp;b)

    sarama.Logger = log.New(out, "[Sarama] ", log.LstdFlags)

    if _, err := sarama.NewClient([]string{"localhost:9092"}, sarama.NewConfig()); err != nil {
        log.Fatalln("NewClient:", err)
    }

    output, err := ioutil.ReadAll(amp;b)
    if err != nil {
        log.Fatalln("ReadAll:", err)
    }

    log.Printf("output: %s", output)
}
  

и я ожидал бы увидеть некоторый вывод. Однако печатный вывод пуст:

 > go run main.go
2020/09/25 16:44:58 output: 
  

В отличие от этого, если я установлю вывод на os.Stderr ,

 package main

import (
    "log"
    "os"

    "github.com/Shopify/sarama"
)

func main() {
    sarama.Logger = log.New(os.Stderr, "[Sarama] ", log.LstdFlags)

    if _, err := sarama.NewClient([]string{"localhost:9092"}, sarama.NewConfig()); err != nil {
        log.Fatalln("NewClient:", err)
    }
}
  

Я вижу ожидаемый результат, напечатанный на терминале:

 > go run main.go
[Sarama] 2020/09/25 16:46:04 Initializing new client
[Sarama] 2020/09/25 16:46:04 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:46:04 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:46:04 client/metadata fetching metadata for all topics from broker localhost:9092
[Sarama] 2020/09/25 16:46:04 Connected to broker at localhost:9092 (unregistered)
[Sarama] 2020/09/25 16:46:04 client/brokers registered new broker #0 at 127.0.0.1:9092
[Sarama] 2020/09/25 16:46:04 Successfully initialized new client
  

Кажется, что *bytes.Buffer он не «сбрасывается» ioutil.ReadAll() ? Как я могу исправить предыдущий пример, чтобы output он не был пустым?

Ответ №1:

Оказывается, мне просто нужно было позвонить

 out.Flush()
  

раньше ioutil.ReadAll() . Теперь результат соответствует ожидаемому:

 > go run main.go
2020/09/25 16:58:26 output: [Sarama] 2020/09/25 16:58:26 Initializing new client
[Sarama] 2020/09/25 16:58:26 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:58:26 ClientID is the default of 'sarama', you should consider setting it to something application-specific.
[Sarama] 2020/09/25 16:58:26 client/metadata fetching metadata for all topics from broker localhost:9092
[Sarama] 2020/09/25 16:58:26 Connected to broker at localhost:9092 (unregistered)
[Sarama] 2020/09/25 16:58:26 client/brokers registered new broker #0 at 127.0.0.1:9092
[Sarama] 2020/09/25 16:58:26 Successfully initialized new client