| package irc |
| |
| import ( |
| "crypto/tls" |
| "os" |
| "testing" |
| "time" |
| ) |
| |
| // set SASLLogin and SASLPassword environment variables before testing |
| func TestConnectionSASL(t *testing.T) { |
| SASLServer := "irc.freenode.net:7000" |
| SASLLogin := os.Getenv("SASLLogin") |
| SASLPassword := os.Getenv("SASLPassword") |
| |
| if SASLLogin == "" { |
| t.Skip("Define SASLLogin and SASLPasword environment varables to test SASL") |
| } |
| if testing.Short() { |
| t.Skip("skipping test in short mode.") |
| } |
| irccon := IRC("go-eventirc", "go-eventirc") |
| irccon.VerboseCallbackHandler = true |
| irccon.Debug = true |
| irccon.UseTLS = true |
| irccon.UseSASL = true |
| irccon.SASLLogin = SASLLogin |
| irccon.SASLPassword = SASLPassword |
| irccon.TLSConfig = &tls.Config{InsecureSkipVerify: true} |
| irccon.AddCallback("001", func(e *Event) { irccon.Join("#go-eventirc") }) |
| |
| irccon.AddCallback("366", func(e *Event) { |
| irccon.Privmsg("#go-eventirc", "Test Message SASL\n") |
| time.Sleep(2 * time.Second) |
| irccon.Quit() |
| }) |
| |
| err := irccon.Connect(SASLServer) |
| if err != nil { |
| t.Fatalf("SASL failed: %s", err) |
| } |
| irccon.Loop() |
| } |
| |
| |
| // 1. Register fingerprint with IRC network |
| // 2. Add SASLKeyPem="-----BEGIN PRIVATE KEY-----..." |
| // and SASLCertPem="-----BEGIN CERTIFICATE-----..." |
| // to CI environment as masked variables |
| func TestConnectionSASLExternal(t *testing.T) { |
| SASLServer := "irc.freenode.net:7000" |
| keyPem := os.Getenv("SASLKeyPem") |
| certPem := os.Getenv("SASLCertPem") |
| |
| if certPem == "" || keyPem == "" { |
| t.Skip("Env vars SASLKeyPem SASLCertPem not present, skipping") |
| } |
| if testing.Short() { |
| t.Skip("skipping test in short mode.") |
| } |
| cert, err := tls.X509KeyPair([]byte(certPem), []byte(keyPem)) |
| if err != nil { |
| t.Fatalf("SASL EXTERNAL cert creation failed: %s", err) |
| } |
| |
| irccon := IRC("go-eventirc", "go-eventirc") |
| irccon.VerboseCallbackHandler = true |
| irccon.Debug = true |
| irccon.UseTLS = true |
| irccon.UseSASL = true |
| irccon.SASLMech = "EXTERNAL" |
| irccon.TLSConfig = &tls.Config{ |
| InsecureSkipVerify: true, |
| Certificates: []tls.Certificate{cert}, |
| } |
| irccon.AddCallback("001", func(e *Event) { irccon.Join("#go-eventirc") }) |
| |
| irccon.AddCallback("366", func(e *Event) { |
| irccon.Privmsg("#go-eventirc", "Test Message SASL EXTERNAL\n") |
| time.Sleep(2 * time.Second) |
| irccon.Quit() |
| }) |
| |
| err = irccon.Connect(SASLServer) |
| if err != nil { |
| t.Fatalf("SASL EXTERNAL failed: %s", err) |
| } |
| irccon.Loop() |
| } |