go-dnssd で service register をする

Add Service Registration by dapplebeforedawn · Pull Request #2 · soh335/go-dnssd · GitHub を送ってもらい go-dnssd を使って service register が出来るようになった。ありがたい。

func RegisterService() (*dnssd.Context, error) {
    txtRecords := map[string]string{
        "path": "/path-to-page.html",
    }

    rc := make(chan *dnssd.RegisterReply)
    ctx, err := dnssd.ServiceRegister(
        dnssd.DNSServiceFlagsSuppressUnusable,
        0, // most applications will pass 0
        "My Server",
        "_http._tcp.",
        "",   // empty string ends up as local domain
        "",   // most applications do not specify a host
        3000, // port the service is running on
        txtRecords,
        rc,
    )

    go dnssd.Process(ctx)

    if err != nil {
        return nil, err
    }

    registerReply, _ := <-rc
    fmt.Println("Register Reply: ", registerReply)
    return ctx, nil
}

context を release すると service register が cancel になるので不必要になるタイミングをとりやすい箇所で defer ctx.Release() とすると良さそう。

https://github.com/soh335/go-dnssd/blob/master/example/test.go

jenkins で複数の junit_output.xml を集める

一つの job で複数の project などの test をし、 jenkins 側で複数の junit_output.xml 的なものを集計してもらう場合についてです。

まず JUnitテスト結果の集計 のところには例えば /path/to/*/junit_output.xml のように指定することが出来ます。 tap の結果を junit に変換するには TAP::Harness::JUnit を使っていますが、このままだと、/path/to/a/junit_output.xml と /path/to/b/junit_output.xml にある testcase とかが同じ名前になってしまうことがあるのでそういうことを考慮すると

export JUNIT_OUTPUT_FILE=junit_output.xml
export JUNIT_NAME_MANGLE=none

cd /path/to/a
export JUNIT_PACKAGE=a
prove -lvr --harness TAP::Harness::JUnit t

cd /path/to/b
export JUNIT_PACKAGE=b
prove -lvr --harness TAP::Harness::JUnit t

みたいな感じで /path/to/*/junit_output.xml として集計すると a.t/hoge_fuga.t, b.t/hoge_fuga.t みたいな感じで集計されて良いかなと思いました。

JUNIT_OUTPUT_FILE, JUNIT_NAME_MANGLE に関しては以下に書きました

DBIx::Class::Storage::TxnEndHook というのを書いてみた

2014-01-27 23:17:26     hisaichi5518    soh335: DBIx-TransactionManager-EndHook のDBIC版
2014-01-27 23:17:29     hisaichi5518    なんで作るのやめん
2014-01-27 23:17:33     hisaichi5518    やめたん
2014-01-27 23:17:37     soh335  teng
2014-01-27 23:17:39     soh335  使ってこ

こんなことがあったので手元の perl directory にあった DBIx-Class-Storage-TxnEndHook に再度トライして作ってみました。

soh335/DBIx-Class-Storage-TxnEndHook · GitHub

DBIx::Class に余り詳しくないのでお作法的な所に自信がないので詳しい方居たら教えていただきたいです。

DBIx::TransactionManager::EndHook に関しては以下を。

go-test-redisserver というのを書いた

soh335/go-test-redisserver · GitHub

package main

import (
        "github.com/soh335/go-test-redisserver"
        "github.com/garyburd/redigo/redis"
)

func main() {
        s, err := redistest.NewRedisServer(nil)
        if err != nil {
                panic(err)
        }
        defer s.Stop()
        conn, err := redis.Dial("unix", s.Config.UnixSocket)
        if err != nil {
                panic(err)
        }
        _, err = conn.Do("PING")
        if err != nil {
                panic(err)
        }
}

こんな感じで使います。

typester/Test-RedisServer · GitHublestrrat/go-test-mysqld · GitHub を参考にしました。