| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | package test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"os" | 
					
						
							|  |  |  | 	"os/exec" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | // Go get external example plugin, compile it into CoreDNS | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | // and check if it is really there, but running coredns -plugins. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-06 05:54:24 -07:00
										 |  |  | // Dangerous test as it messes with your git tree, maybe use tag? | 
					
						
							| 
									
										
										
										
											2017-09-16 14:13:28 +01:00
										 |  |  | func testExternalPluginCompile(t *testing.T) { | 
					
						
							|  |  |  | 	if err := addExamplePlugin(); err != nil { | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-08-06 05:54:24 -07:00
										 |  |  | 	defer run(t, gitReset) | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if _, err := run(t, goGet); err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if _, err := run(t, goGen); err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if _, err := run(t, goBuild); err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	out, err := run(t, coredns) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if !strings.Contains(string(out), "dns.example") { | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | 		t.Fatal("dns.example plugin should be there") | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func run(t *testing.T, c *exec.Cmd) ([]byte, error) { | 
					
						
							|  |  |  | 	c.Dir = ".." | 
					
						
							|  |  |  | 	out, err := c.Output() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, fmt.Errorf("run: failed to run %s %s: %q", c.Args[0], c.Args[1], err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return out, nil | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 14:13:28 +01:00
										 |  |  | func addExamplePlugin() error { | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | 	f, err := os.OpenFile("../plugin.cfg", os.O_APPEND|os.O_WRONLY, os.ModeAppend) | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer f.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_, err = f.WriteString(example) | 
					
						
							| 
									
										
										
										
											2017-08-06 05:54:24 -07:00
										 |  |  | 	return err | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ( | 
					
						
							| 
									
										
										
										
											2017-08-06 05:54:24 -07:00
										 |  |  | 	goBuild  = exec.Command("go", "build") | 
					
						
							|  |  |  | 	goGen    = exec.Command("go", "generate") | 
					
						
							|  |  |  | 	goGet    = exec.Command("go", "get", "github.com/coredns/example") | 
					
						
							|  |  |  | 	gitReset = exec.Command("git", "checkout", "core/*") | 
					
						
							|  |  |  | 	coredns  = exec.Command("./coredns", "-plugins") | 
					
						
							| 
									
										
										
										
											2017-07-29 04:04:12 -07:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const example = "1001:example:github.com/coredns/example" |