@@ -3,6 +3,7 @@ package column_test
33import (
44 "bytes"
55 "fmt"
6+ "net"
67 "reflect"
78 "testing"
89 "time"
@@ -480,3 +481,56 @@ func Test_Column_UUID(t *testing.T) {
480481 }
481482 }
482483}
484+
485+ func Test_Column_IP (t * testing.T ) {
486+ var (
487+ buf bytes.Buffer
488+ encoder = binary .NewEncoder (& buf )
489+ decoder = binary .NewDecoder (& buf )
490+ )
491+ if column , err := columns .Factory ("column_name" , "IPv4" , time .Local ); assert .NoError (t , err ) {
492+ for _ , ip := range []string {
493+ "127.0.0.1" ,
494+ } {
495+ if err := column .Write (encoder , ip ); assert .NoError (t , err ) {
496+ if v , err := column .Read (decoder ); assert .NoError (t , err ) {
497+ assert .Equal (t , net .ParseIP (ip ), v )
498+ }
499+ }
500+ }
501+ if assert .Equal (t , "column_name" , column .Name ()) && assert .Equal (t , "IPv4" , column .CHType ()) {
502+ assert .Equal (t , reflect .TypeOf (net.IP {}).Kind (), column .ScanType ().Kind ())
503+ }
504+ if err := column .Write (encoder , int8 (0 )); assert .Error (t , err ) {
505+ if e , ok := err .(* columns.ErrUnexpectedType ); assert .True (t , ok ) {
506+ assert .Equal (t , int8 (0 ), e .T )
507+ }
508+ }
509+ if err := column .Write (encoder , "" ); assert .Error (t , err ) {
510+ assert .Equal (t , & columns.ErrUnexpectedType {Column : column , T : "" }, err )
511+ }
512+ }
513+
514+ if column , err := columns .Factory ("column_name" , "IPv6" , time .Local ); assert .NoError (t , err ) {
515+ for _ , ip := range []string {
516+ "2001:0db8:0000:0000:0000:ff00:0042:8329" ,
517+ } {
518+ if err := column .Write (encoder , ip ); assert .NoError (t , err ) {
519+ if v , err := column .Read (decoder ); assert .NoError (t , err ) {
520+ assert .Equal (t , net .ParseIP (ip ), v )
521+ }
522+ }
523+ }
524+ if assert .Equal (t , "column_name" , column .Name ()) && assert .Equal (t , "IPv6" , column .CHType ()) {
525+ assert .Equal (t , reflect .TypeOf (net.IP {}).Kind (), column .ScanType ().Kind ())
526+ }
527+ if err := column .Write (encoder , int8 (0 )); assert .Error (t , err ) {
528+ if e , ok := err .(* columns.ErrUnexpectedType ); assert .True (t , ok ) {
529+ assert .Equal (t , int8 (0 ), e .T )
530+ }
531+ }
532+ if err := column .Write (encoder , "" ); assert .Error (t , err ) {
533+ assert .Equal (t , & columns.ErrUnexpectedType {Column : column , T : "" }, err )
534+ }
535+ }
536+ }
0 commit comments