123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // Copyright (c) 2019 Shivaram Lingamneni
- // released under the MIT license
-
- package irc
-
- import (
- "fmt"
- "testing"
-
- "github.com/ergochat/ergo/irc/languages"
- "github.com/ergochat/ergo/irc/utils"
- )
-
- func TestGenerateBatchID(t *testing.T) {
- var session Session
- s := make(utils.HashSet[string])
-
- count := 100000
- for i := 0; i < count; i++ {
- s.Add(session.generateBatchID())
- }
-
- if len(s) != count {
- t.Error("duplicate batch ID detected")
- }
- }
-
- func BenchmarkGenerateBatchID(b *testing.B) {
- var session Session
- for i := 0; i < b.N; i++ {
- session.generateBatchID()
- }
- }
-
- func BenchmarkNames(b *testing.B) {
- channelSize := 1024
- server := &Server{
- name: "ergo.test",
- }
- lm, err := languages.NewManager(false, "", "")
- if err != nil {
- b.Fatal(err)
- }
- server.config.Store(&Config{
- languageManager: lm,
- })
- for i := 0; i < b.N; i++ {
- channel := &Channel{
- name: "#test",
- nameCasefolded: "#test",
- server: server,
- members: make(MemberSet),
- }
- for j := 0; j < channelSize; j++ {
- nick := fmt.Sprintf("client_%d", j)
- client := &Client{
- server: server,
- nick: nick,
- nickCasefolded: nick,
- }
- channel.members.Add(client)
- channel.regenerateMembersCache()
- session := &Session{
- client: client,
- }
- rb := NewResponseBuffer(session)
- channel.Names(client, rb)
- if len(rb.messages) < 2 {
- b.Fatalf("not enough messages: %d", len(rb.messages))
- }
- // to inspect the messages: line, _ := rb.messages[0].Line()
- }
- }
- }
-
- func TestUserMasks(t *testing.T) {
- var um UserMaskSet
-
- if um.Match("horse_!user@tor-network.onion") {
- t.Error("bad match")
- }
-
- um.Add("_!*@*", "x", "x")
- if !um.Match("_!user@tor-network.onion") {
- t.Error("failure to match")
- }
- if um.Match("horse_!user@tor-network.onion") {
- t.Error("bad match")
- }
-
- um.Add("beer*!*@*", "x", "x")
- if !um.Match("beergarden!user@tor-network.onion") {
- t.Error("failure to match")
- }
- if um.Match("horse_!user@tor-network.onion") {
- t.Error("bad match")
- }
-
- um.Add("horse*!user@*", "x", "x")
- if !um.Match("horse_!user@tor-network.onion") {
- t.Error("failure to match")
- }
- }
-
- func TestWhoFields(t *testing.T) {
- var w whoxFields
-
- if w.Has('a') {
- t.Error("zero value of whoxFields must be empty")
- }
- w = w.Add('a')
- if !w.Has('a') {
- t.Error("failed to set and get")
- }
- if w.Has('A') {
- t.Error("false positive")
- }
- if w.Has('o') {
- t.Error("false positive")
- }
- w = w.Add('🐬')
- if w.Has('🐬') {
- t.Error("should not be able to set invalid who field")
- }
- w = w.Add('o')
- if !w.Has('o') {
- t.Error("failed to set and get")
- }
- w = w.Add('z')
- if !w.Has('z') {
- t.Error("failed to set and get")
- }
- }
|