2017-09-23 13:56:58 +08:00
// Copyright 2015 Light Code Labs, LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2017-04-18 01:02:44 +08:00
package index
import (
"testing"
"github.com/mholt/caddy"
2017-10-30 05:13:10 +08:00
"github.com/mholt/caddy/caddyhttp/httpserver"
2017-04-18 01:02:44 +08:00
"github.com/mholt/caddy/caddyhttp/staticfiles"
)
func TestIndexIncompleteParams ( t * testing . T ) {
c := caddy . NewTestController ( "" , "index" )
err := setupIndex ( c )
if err == nil {
t . Error ( "Expected an error, but didn't get one" )
}
}
func TestIndex ( t * testing . T ) {
2017-10-30 05:13:10 +08:00
c := caddy . NewTestController ( "http" , "index a.html b.html c.html" )
2017-04-18 01:02:44 +08:00
err := setupIndex ( c )
if err != nil {
t . Errorf ( "Expected no errors, got: %v" , err )
}
expectedIndex := [ ] string { "a.html" , "b.html" , "c.html" }
2017-10-30 05:13:10 +08:00
siteConfig := httpserver . GetConfig ( c )
if len ( siteConfig . IndexPages ) != len ( expectedIndex ) {
t . Errorf ( "Expected 3 values, got %v" , len ( siteConfig . IndexPages ) )
2017-04-18 01:02:44 +08:00
}
// Ensure ordering is correct
2017-10-30 05:13:10 +08:00
for i , actual := range siteConfig . IndexPages {
2017-04-18 01:02:44 +08:00
if actual != expectedIndex [ i ] {
t . Errorf ( "Expected value in position %d to be %v, got %v" , i , expectedIndex [ i ] , actual )
}
}
}
2017-10-30 05:13:10 +08:00
func TestMultiSiteIndexWithEitherHasDefault ( t * testing . T ) {
// TestIndex already covers the correctness of the directive
// when used on a single controller, so no need to verify test setupIndex again.
// This sets the stage for the actual verification.
customIndex := caddy . NewTestController ( "http" , "index a.html b.html" )
// setupIndex against customIdx should not pollute the
// index list for other controllers.
err := setupIndex ( customIndex )
if err != nil {
t . Errorf ( "Expected no errors, got: %v" , err )
}
// Represents a virtual host with no index directive.
defaultIndex := caddy . NewTestController ( "http" , "" )
// Not calling setupIndex because it guards against lack of arguments,
// and we need to ensure the site gets the default set of index pages.
siteConfig := httpserver . GetConfig ( defaultIndex )
// In case the index directive is not used, the virtual host
// should receive staticfiles.DefaultIndexPages slice. The length, as checked here,
// and the values, as checked in the upcoming loop, should match.
if len ( siteConfig . IndexPages ) != len ( staticfiles . DefaultIndexPages ) {
t . Errorf ( "Expected %d values, got %d" , len ( staticfiles . DefaultIndexPages ) , len ( siteConfig . IndexPages ) )
}
// Ensure values match the expected default index pages
for i , actual := range siteConfig . IndexPages {
if actual != staticfiles . DefaultIndexPages [ i ] {
t . Errorf ( "Expected value in position %d to be %v, got %v" , i , staticfiles . DefaultIndexPages [ i ] , actual )
}
}
}
func TestPerSiteIndexPageIsolation ( t * testing . T ) {
firstIndex := "first.html"
secondIndex := "second.html"
// Create two sites with different index page configurations
firstSite := caddy . NewTestController ( "http" , "index first.html" )
err := setupIndex ( firstSite )
if err != nil {
t . Errorf ( "Expected no errors, got: %v" , err )
}
secondSite := caddy . NewTestController ( "http" , "index second.html" )
err = setupIndex ( secondSite )
if err != nil {
t . Errorf ( "Expected no errors, got: %v" , err )
}
firstSiteConfig := httpserver . GetConfig ( firstSite )
if firstSiteConfig . IndexPages [ 0 ] != firstIndex {
t . Errorf ( "Expected index for first site as %s, received %s" , firstIndex , firstSiteConfig . IndexPages [ 0 ] )
}
secondSiteConfig := httpserver . GetConfig ( secondSite )
if secondSiteConfig . IndexPages [ 0 ] != secondIndex {
t . Errorf ( "Expected index for second site as %s, received %s" , secondIndex , secondSiteConfig . IndexPages [ 0 ] )
}
// They should have different index pages, as per the provided config.
if firstSiteConfig . IndexPages [ 0 ] == secondSiteConfig . IndexPages [ 0 ] {
t . Errorf ( "Expected different index pages for both sites, got %s for first and %s for second" , firstSiteConfig . IndexPages [ 0 ] , secondSiteConfig . IndexPages [ 0 ] )
}
}