fix and add tests
This commit is contained in:
19
spf2.go
19
spf2.go
@@ -8,10 +8,8 @@ package libspf2
|
|||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <spf2/spf.h>
|
#include <spf2/spf.h>
|
||||||
*/
|
*/
|
||||||
import (
|
import "C"
|
||||||
"C"
|
import "errors"
|
||||||
"errors"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SPFResultINVALID = Result(C.SPF_RESULT_INVALID) // (invalid)
|
SPFResultINVALID = Result(C.SPF_RESULT_INVALID) // (invalid)
|
||||||
@@ -26,7 +24,7 @@ const (
|
|||||||
|
|
||||||
type Client interface {
|
type Client interface {
|
||||||
Query(host, ip string) (Result, error)
|
Query(host, ip string) (Result, error)
|
||||||
Close() error
|
Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
type clientImpl struct {
|
type clientImpl struct {
|
||||||
@@ -52,7 +50,8 @@ func (s *clientImpl) Query(host, ip string) (Result, error) {
|
|||||||
if err := req.setIPv4Addr(ip); err != nil {
|
if err := req.setIPv4Addr(ip); err != nil {
|
||||||
return SPFResultINVALID, err
|
return SPFResultINVALID, err
|
||||||
}
|
}
|
||||||
if resp, err := req.query(); err != nil {
|
resp, err := req.query()
|
||||||
|
if err != nil {
|
||||||
return SPFResultNONE, err
|
return SPFResultNONE, err
|
||||||
}
|
}
|
||||||
defer resp.free()
|
defer resp.free()
|
||||||
@@ -63,9 +62,7 @@ func (s *clientImpl) Close() {
|
|||||||
if s.s != nil {
|
if s.s != nil {
|
||||||
C.SPF_server_free(s.s)
|
C.SPF_server_free(s.s)
|
||||||
s.s = nil
|
s.s = nil
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
return errors.New("already closed")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type request struct {
|
type request struct {
|
||||||
@@ -74,7 +71,7 @@ type request struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newRequest(s *clientImpl) *request {
|
func newRequest(s *clientImpl) *request {
|
||||||
r := new(Request)
|
r := new(request)
|
||||||
r.s = s
|
r.s = s
|
||||||
r.r = C.SPF_request_new(s.s)
|
r.r = C.SPF_request_new(s.s)
|
||||||
return r
|
return r
|
||||||
@@ -101,7 +98,7 @@ func (r *request) setEnvFrom(fromHost string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Query starts the SPF query
|
// Query starts the SPF query
|
||||||
func (r *Request) query() (*response, error) {
|
func (r *request) query() (*response, error) {
|
||||||
var stat C.SPF_errcode_t
|
var stat C.SPF_errcode_t
|
||||||
var resp *C.SPF_response_t
|
var resp *C.SPF_response_t
|
||||||
stat = C.SPF_request_query_mailfrom(r.r, &resp)
|
stat = C.SPF_request_query_mailfrom(r.r, &resp)
|
||||||
@@ -124,7 +121,7 @@ type response struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Result returns the SPF validation result
|
// Result returns the SPF validation result
|
||||||
func (r *response) result() result {
|
func (r *response) result() Result {
|
||||||
return Result(C.SPF_response_result(r.r))
|
return Result(C.SPF_response_result(r.r))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
18
spf2_test.go
18
spf2_test.go
@@ -6,10 +6,10 @@ import (
|
|||||||
|
|
||||||
func TestSpf2(t *testing.T) {
|
func TestSpf2(t *testing.T) {
|
||||||
c := NewClient()
|
c := NewClient()
|
||||||
defer c.Free()
|
defer c.Close()
|
||||||
|
|
||||||
req := newRequest(c)
|
req := newRequest(c.(*clientImpl))
|
||||||
defer req.Free()
|
defer req.free()
|
||||||
|
|
||||||
err := req.setIPv4Addr("173.194.39.150")
|
err := req.setIPv4Addr("173.194.39.150")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -33,3 +33,15 @@ func TestSpf2(t *testing.T) {
|
|||||||
t.Fatal(s)
|
t.Fatal(s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestInterface(t *testing.T) {
|
||||||
|
client := NewClient()
|
||||||
|
defer client.Close()
|
||||||
|
res, err := client.Query("gmail.com", "173.194.39.150")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("client.Query() err = %v, expected nil", err)
|
||||||
|
}
|
||||||
|
if s := res.String(); s != "pass" {
|
||||||
|
t.Fatal(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user